c++ - 科学记数法对于 C 中的整数常量是否安全?

标签 c++ c gcc

一段时间以来,我一直在用科学计数法表示常数的 10 的大幂,这样我就不必数零了。例如

#define DELAY_USEC 1e6

一位同事指出这是不安全的,因为它不是整数,也不能保证总是等于 1000000准确。文档似乎证实了这一点,但我想知道它是否真的实用。有没有办法使用速记安全地声明一个十次方整数?将其转换为定义中的 int 是否安全?

最佳答案

理论上,不会。两种语言都没有指定如何表示浮点值,或者可以精确表示哪些值。 (更新:显然,C11 确实推荐了一种表示形式。C++ 和较旧的 C 方言不推荐)。

实际上,是的,对于相当大范围的值。您可能会遇到的任何实现都将使用 64-bit IEEE representation对于 double。这可以精确地表示最大为 253(大约 9x1015)的任何整数值。它当然可以表示任何可以用 32 位整数类型表示的东西。

关于c++ - 科学记数法对于 C 中的整数常量是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24389678/

相关文章:

c - 将匿名参数传递给 C 中的函数

c++ - 如何在opencv中检查白色四边形

c - 使用 fopen() 的函数保持打开同一个文件,即使给定不同的文件名作为参数

c - rb_iv_get 和 rb_iv_set 对比。 Data_Wrap_Struct 用于创建自定义类

c++ - 函数的隐式声明可以在 gcc 中编译,但不能在 g++ 中编译

来自可执行文件的控制流程图?

python - 将数据从一个 .exe 传递到另一个

c++ - 动态规划问题

c++ - deltaTicks 的问题与游戏循环中的高速相结合

c - 数组类型对于 struct iocb 具有不完整的元素类型