2011-05-16 58 views
3

我必須根據以下實現做一些邏輯。通過劃分兩個數字找到商的最快方法

我有一個高達36位的大數字,例如913695089923267549815145223638290430(由不同的應用程序隨機生成)。我需要的任何數量的長度小於說70368844197664將其分攤;(由不同的應用程序隨機生成)假設我得到商作爲19956694.3256

對於我的代碼只有商的最後一位小數點前(即4)是很重要的。目標是檢查商是否是偶數或者最後一位數字的可能值。

我不能使用簡單的DB函數,如模數或分區,因爲它非常耗時。有沒有更快的有效方式?任何建議將不勝感激。

非常感謝。

問候 Neeraj

+2

因此,給定128位'unsigned int m'和64位'unsigned int n',你想計算'(m/n)%10'。是對的嗎?這是一個奇怪的要求!它表明有些事情想要重新設計。你需要什麼? – TonyK 2011-05-16 16:41:20

+0

@TonyK:我不能改變要求,但它在那裏。問題是數學的而不是程序化的。但m試試我的運氣 – Neeraj 2011-05-16 18:41:36

+0

你是否需要在查詢中,或在一個函數/過程? – 2011-05-16 20:16:16

回答

5

你想要做的是相當多的「模運算」的定義。如果數據庫中的內置算法無法足夠快地完成計算,我不確定您可以做些什麼來改進編寫自己的數據庫引擎或購買更高功率硬件的短缺。

問題真的是算術的速度,還是記錄檢索或索引?我的意思是,如果你說是這樣的:

select ... whatever ... from table1 join table2 using (someid) 
where (table1.q/table2.d) % 10 = 4 

和你沒有在功能上(table1.q/table2.d)10%的指標,這就要求數據庫讀取每個記錄,進行計算,然後挑選出那些給出正確答案的人。你的問題可能不是算術,而是索引。

相關問題