如果双变量等于0,哪种方法(效率/最佳实践)更好?
1. if(a_double)
.....
else
.....
OR
2. if(a_double == 0)
.....
else
.....
Run Code Online (Sandbox Code Playgroud)
第二个通常更好(更清楚你正在做什么).我通常喜欢if (a_double == 0.0).还要注意,对于浮点数,进行近似比较以考虑计算中舍入的可能性通常很有用(尽管这样做可能非常重要).
编辑:由于似乎存在一些关于哪些数字能够和不能精确表示的误解:大多数计算机使用二进制浮点数.这意味着分母是两个幂的和的一个分数可以精确表示.如果(并且仅当)分母包含不能表示为2的幂的和的素因子,则不可能精确地表示该数.
当然,如果你太小(或太大),根本无法表示数字(例如,正常的IEEE浮点数不能提供表示1e + 10000或1e-2000等数字的方法).此外,当你接近表示的极限时,你放弃了一些精度(例如,法线的极限double是1e-308--而在1e-300,你只得到~7位精度而不是通常的~15) .
然而,在一定限度内,整数可以精确表示(取决于有效数的大小 - 通常约为2 53),分母的总和或2的幂(例如,3.5,1.375)也是如此.
还有使用十六进制浮点和/或十进制浮点的计算机.对于我们在这里考虑的内容,十六进制浮点基本上与二进制浮点相同(即,因为16是2的幂,如果分母是2的幂的和,它仍然只能精确地表示分数).十进制浮点允许精确表示数字,其中分母包括5的幂(例如,1.2可以精确地表示为十进制浮点但不是二进制或十六进制浮点).这具有明显的优势(再次,在其范围和精度的限制范围内)您输入的任何十进制数字都将被精确表示.
| 归档时间: |
|
| 查看次数: |
3443 次 |
| 最近记录: |