sto*_*ang 1 c c++ type-conversion
我的问题:
尝试找出以下C++代码段的结果:
#include <iostream>
int main(int argc, char* argv[])
{
double a = 5.1;
int b = a * 100;
std::cout << b << std::endl;
double c = 6.1;
int d = c * 100;
std::cout << d << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在Windows上,我使用VS2008 SP1编译并运行上面的代码并获取:
509
610
Run Code Online (Sandbox Code Playgroud)
在Linux上,我使用g ++编译并运行相同的代码并获取:
509
609
Run Code Online (Sandbox Code Playgroud)
代码有什么问题?
对不起,我试图找出问题的标题,因此我可以搜索一下.但是,我不能说出这个问题,所以我直接在这里提出.
任何建议表示赞赏.
double是不是一个确切的类型,你可以通过应用看到std::numeric_limitstypetrait:
#include <limits>
static_assert(std::numeric_limits<double>::is_exact == false);
Run Code Online (Sandbox Code Playgroud)
因此涉及双打的计算只是近似的,你所观察到的并没有错.
您的代码没有问题.