提问人:Creart 提问时间:3/11/2020 更新时间:3/11/2020 访问量:67
Java - 使用 double 更精确
Java - Be more precise with double
问:
我目前正在为 uni 编写一个项目,我想知道是否有任何好的做法可以更精确地使用双精度值。也就是说,如果我直接在 return 语句中只写一个长表达式,精度是否有任何差异,或者如果我将表达式拆分为变量会更好(顺便说一下,使其更具可读性)?例如,想象一下,如果我有以下公式:;这样写好吗?final
Math.sin(a) / Math.cos(b) + Math.tan(c) / d
final double sinA = Math.sin(a);
final double cosB = Math.cos(b);
final double tanC = Math.tan(c);
return sinA / cosB + tanC / d;
先谢谢你!
答:
2赞
Bathsheba
3/11/2020
#1
如果您的 JVM/JIT 正确地实现了 Java 语言规范所要求的IEEE754,则不会有任何区别。
就我个人而言,我会写
double ret = Math.sin(a) / Math.cos(b) + Math.tan(c) / d;
return ret;
因为这允许我在语句上设置一个行断点,这使我能够检查返回值,而无需花哨的调试工具,这些工具可能在凌晨 3 点在生产服务器上不可用!我发现你写它的方式不清楚:依赖变量名称比标准函数名称更容易重构损坏。return ret;
您可以相信编译器会优化额外的变量。ret
下一个:浮点数学坏了吗?
评论
BigDecimal
final
将只确保变量在初始化后无法赋值(即设置为一个值)。对于局部变量,这主要只是为了有利于维护/可读性;除此之外,它什么都不做。