8
int s = 1e9;

什么是类型,1e9它有多精确?(它是否正好等于 1000000000?)

如果可能的话,打印值/变量的类型stdout会很有用。

4

3 回答 3

10

1e9double在 IEEE 浮点表示中具有精确表示的 a。C++ 标准不强制要求 IEEE 浮点。

s是一个int,所以该double值将自动转换为一个int。这在某种程度上取决于实施。在当今的大多数机器上,这种转换方式s将被赋予初始值 1000000000。

于 2011-11-28T14:10:00.857 回答
5

对于它的价值,您可以编写显示1e9具有 type的代码double

#include <iostream>

void show_type(double value) { 
    std::cout << "type = double\n"; 
}
void show_type(...) {
    std::cout << "Type != double\n";
}

int main() { 
    show_type(1e9);
    return 0;
}

当然,如果你不知道它有什么类型,那么为每一种可能的类型提供一个重载是相当多的工作,但是原理是一样的。

于 2011-11-28T15:00:36.937 回答
2

如果您将其更改为floatdouble将非常精确,但并非所有使用它的计算都是精确的(感谢 Kerrek SB),那么精度就会受到限制。

请注意,精度不是notation的属性,无论如何,符号本身就是精确性。

于 2011-11-28T14:08:45.170 回答