C++ 输入cast C++;举止古怪

C++ 输入cast C++;举止古怪,c++,types,casting,C++,Types,Casting,这可能是个愚蠢的问题,但我遇到了一个奇怪的问题 我发现这行代码 cout << long((15.25-14.74)*100) << endl 在浮点算术中,实数有时可能不是您所期望的,因为精度是有限的。在你的例子中,0.51实际上是0.5099999在浮点算术中,实数有时可能不是你所期望的,因为精度是有限的。在您的情况下,0.51实际上是0.5099999GCC最常见的非bug了。。。请看浮点运算不精确。如果由于浮点不精确,您得到15.25-14.74=0.5099

这可能是个愚蠢的问题,但我遇到了一个奇怪的问题

我发现这行代码

cout << long((15.25-14.74)*100) << endl 

在浮点算术中,实数有时可能不是您所期望的,因为精度是有限的。在你的例子中,
0.51
实际上是
0.5099999
在浮点算术中,实数有时可能不是你所期望的,因为精度是有限的。在您的情况下,
0.51
实际上是
0.5099999

GCC最常见的非bug了。。。请看浮点运算不精确。如果由于浮点不精确,您得到15.25-14.74=0.509999999,通过截断将其转换为int将删除所有9。这不是“GCC最常见的非错误”。我们这里有不同的舍入错误。GCC最常见的非错误再次出现。。。请看浮点运算不精确。如果由于浮点不精确,您得到15.25-14.74=0.509999999,通过截断将其转换为int将删除所有9。这不是“GCC最常见的非错误”。我们这里有不同的舍入误差。我本以为它是0.51000001,除非是长掷而不是截断。@cup标准没有深入到实现中,所以这完全取决于FPU和/或编译器。我本以为它是0.51000001,除非长的强制转换轮而不是截断。@cup标准没有深入到实现中,所以这完全取决于FPU和/或编译器。
cout << long(0.51*100) << endl