Java 有没有办法避免BigInteger/BigDecimal?
我需要计算如下内容(伪代码): 有时x*y不适合长时间使用。我希望避免使用BigDecimal/BigInteger,因为它成本太高,在其他任何地方都不需要。有没有一个聪明的数学解决方案,比如两个long或smth之类的 谢谢大家! 更新:抱歉,伙计们,还有一个约束条件:我还有一个计算如下的变量(可能也可以重写):Java 有没有办法避免BigInteger/BigDecimal?,java,algorithm,optimization,bigdecimal,Java,Algorithm,Optimization,Bigdecimal,我需要计算如下内容(伪代码): 有时x*y不适合长时间使用。我希望避免使用BigDecimal/BigInteger,因为它成本太高,在其他任何地方都不需要。有没有一个聪明的数学解决方案,比如两个long或smth之类的 谢谢大家! 更新:抱歉,伙计们,还有一个约束条件:我还有一个计算如下的变量(可能也可以重写): 我需要重新计算它以与另一个变量进行比较以停止循环。您可以将其除以两次 y = a / (b * c) y1 = a / b y = y1 / c 很难理解您如何准确地使用此和
我需要重新计算它以与另一个变量进行比较以停止循环。您可以将其除以两次
y = a / (b * c)
y1 = a / b
y = y1 / c
很难理解您如何准确地使用此
和
以及比较值是如何计算的,但是是否可以存储比较结果来避免较大的值,例如如果结果
>0则和
较大,如果结果<0则其他值较大,…我注意到我比较的和的值是长的。所以我用以下方法解决了这个问题:
- 我是这样计算的:((a-n)/(double)x)/y))
- 下面是
j
:(long)Math.ceil((b-n)/(double)x*y)
- 当然,上面的例子是多余的。但我防止溢出,请在之前执行以下“尝试捕捉”:
try {
xy = Math.multiplyExact(x, y);
...
} catch (ArithmeticException ex) {
// some handling
break;
}
这个由代码实现的技巧工作得足够快
希望它能帮助别人 似乎是合理的,但我还需要存储此类m*w
的当前总和,抱歉,我已更新了问题注释,不用于扩展讨论;这段对话已经结束。
sum += x*y
y = a / (b * c)
y1 = a / b
y = y1 / c
try {
xy = Math.multiplyExact(x, y);
...
} catch (ArithmeticException ex) {
// some handling
break;
}