ess*_*sse 6 java floating-point
以下代码来自Math.javajava标准库:
public static double abs(double a) {
return (a <= 0.0D) ? 0.0D - a : a;
}
Run Code Online (Sandbox Code Playgroud)
我有以下问题:
return (a <= 0) ? 0.0D - a : a;return (a <= 0) ? - a : a;谢谢你的帮助!
a <= 0当a双转换0为double(由于二进制数字提升),这意味着它相当于a <= 0.0D.
a <= 0.0D可能更有效,因为它保存了转换,但如果编译器转换a <= 0为a <= 0.0D以保存该类型转换,我不会感到惊讶。
JLS相关报价:
对操作数执行二进制数字提升(第 5.6.2 节)。
如果任一操作数的类型为 double,则另一个将转换为 double。
至于你的第二个问题,使用一元否定运算符的代码不等同于abs方法的代码,因为:
对于浮点值,否定与从零减法不同,因为如果 x 为 +0.0,则 0.0-x 为 +0.0,而 -x 为 -0.0。一元减号只是反转浮点数的符号。
顺便说一句,正零或负零的情况在该abs方法的Javadoc中被称为特例:
特别案例:
• 如果参数为正零或负零,则结果为正零。
• 如果参数是无穷大,则结果是正无穷大。
• 如果参数为 NaN,则结果为 NaN。
前两个特殊情况是-a与 不同的情况0.0D - a。
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |