【发布时间】:2011-02-02 20:17:39
【问题描述】:
我想测试一个数字 double x 是否是 10 的整数幂。我也许可以使用 cmath 的 log10 然后测试 x == (int) x 是否?
编辑:实际上,我的解决方案不起作用,因为双精度数可以很大,比 int 大得多,也可以很小,比如分数。
【问题讨论】:
-
@Yacoby 十的幂是
10^n形式的数字,其中n是一个整数,所以这肯定会起作用。 -
请注意,IEEE754 双精度只有 52 位。因此,10^15 可以精确表示,但
double(10^16)==double(10^16+1)。结果,您将有误报或误报。使用long long(如果可用)可能会更好。 -
所以 10E15 是可以精确表示的 10 的最大幂。出于好奇,10E-15 的最小值是多少?
-
@Helltone:10 的负数不能精确表示,因为 1/10 没有有限的二进制表示。
标签: c++ math floating-point