Java - 使用 double 更精确
Java - Be more precise with double
我目前正在为 uni 编写一个项目,我想知道是否有任何好的做法可以更精确地 with 双精度值。也就是说,如果我直接在 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;
提前致谢!
如果您的 JVM/JIT 正确实现了 Java 语言规范所要求的 IEEE754,那将不会有任何区别。
我个人会写
double ret = Math.sin(a) / Math.cos(b) + Math.tan(c) / d;
return ret;
因为这允许我在 return ret;
语句上设置一个行断点,这样我就可以检查 return 值而无需花哨的调试工具,您可能无法在生产服务器上使用这些工具凌晨3点!我发现你写的方式不清楚:依赖变量名比标准函数名更容易重构损坏。
您可以相信编译器会优化掉多余的变量 ret
。
我目前正在为 uni 编写一个项目,我想知道是否有任何好的做法可以更精确地 with 双精度值。也就是说,如果我直接在 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;
提前致谢!
如果您的 JVM/JIT 正确实现了 Java 语言规范所要求的 IEEE754,那将不会有任何区别。
我个人会写
double ret = Math.sin(a) / Math.cos(b) + Math.tan(c) / d;
return ret;
因为这允许我在 return ret;
语句上设置一个行断点,这样我就可以检查 return 值而无需花哨的调试工具,您可能无法在生产服务器上使用这些工具凌晨3点!我发现你写的方式不清楚:依赖变量名比标准函数名更容易重构损坏。
您可以相信编译器会优化掉多余的变量 ret
。