测试 double 变量是否等于 0 的更好方法(效率/最佳实践)是什么?
1. if(a_double)
.....
else
.....
OR
2. if(a_double == 0)
.....
else
.....
最佳答案
第二个通常更好(更明确地说明你在做什么)。不过,我通常更喜欢 if (a_double == 0.0)
。另请注意,对于 float ,进行近似比较通常很有用,以解决计算中四舍五入的可能性(尽管做得好可能很重要)。
编辑:由于似乎对哪些数字可以和不能精确表示存在一些误解:大多数计算机使用二进制 float 。这意味着可以精确地表示分母是二的幂之和的分数。如果(且仅当)分母包含不能表示为 2 的幂之和的质因数,则无法精确表示该数字。
当然,如果你变得太小(或太大),可能根本无法表示数字(例如,普通的 IEEE float 不提供表示 1e+10000 或 1e- 等数字的方法2000)。此外,当您接近表示的极限时,您会放弃一些精度(例如,普通 double
的极限是 1e-308 —— 而在 1e-300 时,您只能得到 ~7 位数精度而不是通常的 ~15)。
然而,在一定范围内,整数可以精确表示(取决于有效数的大小——通常在 253 左右),分母为以下的和或幂的分数也可以2(例如 3.5、1.375)。
还有一些计算机使用十六进制 float 和/或十进制 float 。对于我们在这里考虑的内容,十六进制 float 与二进制 float 本质上是相同的(即,由于 16 是 2 的幂,如果分母是 2 的幂之和,它仍然只能精确表示分数)。十进制 float 允许精确表示分母也包括 5 的幂的数字(例如,1.2 可以用十进制 float 精确表示,但不能用二进制或十六进制 float 表示)。这具有明显的优势(同样,在其范围和精度的限制内)您输入的任何十进制数都将被精确表示。
关于c++ - 将双变量视为 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4020582/