我需要找到非常大的乘法的位数(每个约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