gpt4 book ai didi

java - 对 double 使用模时性能会下降

转载 作者:行者123 更新时间:2023-11-30 06:29:59 25 4
gpt4 key购买 nike

在我编写的特定测试中,对 double 使用模运算符比使用 this 函数慢。

final static double fastmod(double a, double b){
return a - b*(long)(a/b);
}

这是一个 sin() 函数测试,但我想讨论的是双倍性能的模。

编辑:删除了 sin() 测试链接。
添加了仅测试模数的测试。

https://ideone.com/6zqxBR

直觉上我认为 % 运算符应该更快,但测试表明它更慢。
我在这里缺少什么吗?

最佳答案

您的fastmod确实更快,但不等于 % .

使用 Math.random()*100 产生的参数您的实现给出了一个很好的近似值,但是,结果不一定等于 % 的结果转换为 long 时由于精度损失而导致的操作,例如

    System.out.println(7.4 % 2.1);          // 1.1
System.out.println(fastmod(7.4, 2.1)); // 1.0999999999999996

还有fastmod不能正确处理大值和各种极端情况:

    System.out.println(1E20 % 2);          // 0.0
System.out.println(fastmod(1E20, 2)); // 8.155325592629045E19

System.out.println(1 % Double.MIN_VALUE); // 0.0
System.out.println(fastmod(1, Double.MIN_VALUE)); // 1.0

事实上,您的实现得到了简化,这使得它比“正确”余数更快。如果您不关心long之外的数字范围,如果您意识到大约第 15 位数字可能会出现错误,那么使用更快的 fastmod 是完全可以的。 .

关于java - 对 double 使用模时性能会下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46375144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com