【发布时间】:2014-08-14 21:29:26
【问题描述】:
一段时间以来,我一直在用科学计数法表示常数的 10 的大幂,这样我就不必数零了。例如
#define DELAY_USEC 1e6
一位同事指出这是不安全的,因为它不是整数,也不能保证总是等于 1000000准确。文档似乎证实了这一点,但我想知道它是否真的实用。有没有办法使用速记安全地声明一个十次方整数?将其转换为定义中的 int 是否安全?
【问题讨论】:
-
您可以用整数记下 10 的幂并假设它是 1(例如通过命名约定),然后在执行代码时将其传递给真正的 10 次方,这很安全。
-
您没有将其转换为定义中的 int。如果你想要一个整数常量来保证类型安全,并且为了简洁起见,你可以使用十六进制文字。
-
我猜是因为你定义了一个浮点数,所以没有办法知道它是否准确,因为浮点数的精度有限。
-
这不是您问题的答案,但请记住,您可以在定义
static const int SEC_TO_MILLI = 1000; static const int SEC_TO_MICRO = 1000 * SEC_TO_MILLI;之类的常量时使用数学,这通常可以帮助我避免需要复杂的容易出错的数字文字。 -
另一个问题是,在每个表达式中,它所属的部分都将以“双”精度计算,这可能不是您想要的。