Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法避免BigInteger/BigDecimal?_Java_Algorithm_Optimization_Bigdecimal - Fatal编程技术网

Java 有没有办法避免BigInteger/BigDecimal?

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 很难理解您如何准确地使用此和

我需要计算如下内容(伪代码):

有时x*y不适合长时间使用。我希望避免使用BigDecimal/BigInteger,因为它成本太高,在其他任何地方都不需要。有没有一个聪明的数学解决方案,比如两个long或smth之类的

谢谢大家!

更新:抱歉,伙计们,还有一个约束条件:我还有一个计算如下的变量(可能也可以重写):


我需要重新计算它以与另一个变量进行比较以停止循环。

您可以将其除以两次

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;
        }