我需要找到非常大的乘法的位數(每個約300位數)。我想知道是否有一個技巧可以預測產品在沒有真正執行計算的情況下的位數。預測乘法的位數
預測乘法的位數
回答
的位數可以由兩個被乘數的base 10 log加1的圓的(向下)和來計算準確,如下所示:
public static void main(String[] args) {
DecimalFormat f = new DecimalFormat("#");
double num1 = 123456789d;
double num2 = 314159265358979d;
// Here's the line that does the work:
int numberOfDigits = (int) (Math.log10(num1) + Math.log10(num2)) + 1;
System.out.println(f.format(num1) + " * " + f.format(num2) + " = " +
f.format((num1 * num2)) + ", which has " + numberOfDigits + " digits");
}
輸出:
123456789* 314159265358979 = 3878509413969699000000000000000000, which has 34 digits
這將適用於任意大的數字。
Cristobalito的回答幾乎可以得到它。讓我使「約」更精確:
假設第一個數字有n個數字,第二個數字有m個。最低可分別爲10 ^(n-1)和10 ^(m-1)。該產品可能是最低的,並且將是10 ^(m + n-2),這是m + n-1個數字。
它們的最高值分別是10^n-1和10^m-1。該產品可能是最高的,並且將爲10 ^(n + m)-10^n - 10^m + 1,其最多具有m + n個數字。
因此,如果您將n位數乘以m位數,則產品將具有m + n-1或m + n個數字。
類似的邏輯適用於其他基地,如基地2.
其他海報描述的基數爲10的對數是簡單的技術。但是,您可以找到基數2的對數並乘以(log 2)/(log 10),即大約0.693。通過在二進制表示中找到最重要的1的位置,可以發現基數2的對數而不求助於浮點。如果你乘以69和整數除以100,你應該找到大概的數字計數,而不用任何東西,但是整數運算。你可能永遠不應該這樣做,因爲它可能永遠不值得麻煩。可愛,但是,不是嗎? –
爲什麼不把你的評論添加到答案? –
因爲我認爲它不太可能在實踐中真正有用。 –
- 1. 乘法 - 由虛數單位
- 2. 16位數字乘法
- 3. 4位乘以8位彙編乘法
- 4. 兩個64位數的乘法運算
- 5. 2個64位整數的SSE乘法
- 6. 乘法和移位除法
- 7. C#WriteableBitmapEx像素預乘移位
- 8. 有人有一個優化的函數預乘alpha位圖嗎?
- 9. Verilog 4位乘法器?
- 10. vhdl 4位vedic乘法器
- 11. 位移乘法迴路
- 12. 32位乘法組件iApx88
- 13. 64位乘法器在Fpga
- 14. 從數字的加法預測數字
- 15. 算法使用32位無符號整數乘64位數
- 16. 大整數乘法(階乘)
- 17. 8位系統上的2位數乘法
- 18. (My)中的小數乘法的精度和小數位數SQL
- 19. 預測函數的預測值
- 20. 複數乘法陣列乘法
- 21. 與預乘倍數的圖像卷積
- 22. 實數乘法
- 23. 數組乘法
- 24. 大數乘法
- 25. 數組乘法
- 26. ARM - 檢測乘法結果是否適合32位
- 27. 用於MCS-51上24位數的乘法算法
- 28. CUBLAS矩陣乘法並不如預期
- 29. 乘以兩位小數
- 30. 大數乘法的模數
它通常約2 * n,其中n是數字的位數。 – cristobalito
您可以如下限制位數:'floor(log x)* floor(log y)<= digits(x * y)<= ceil(log x)* ceil(log y)'log base 10. – davin
@critobalito它更多n + m其中n和m是每個表達式的位數。例如'9 * 9 = 81'' 999 * 9 = 8991' – Lynch