我正在调查一个在 static_casting long double to double 时 gcc 和 gdb 的奇怪行为的问题。我有类似以下代码的内容:
const double xDelta = 60.0;
int xSplits = 3;
const long double xStepL = static_cast<long double>(xSplits) / xDelta;
const double xStep = static_cast<double>(xStepL);
基本上它除以 3/60,所以结果应该是 0.05。使用简单double
值操作时,值xStep
是0.050000000000000003
,因此决定使用更高精度的 12 字节long double
。xStepL
上例中的值为0.05000000000000000000067762635780344
。当将此值转换回 时double
,实际上0.050000000000000003
又是。但是,当使用 gdb 检查该值时,它会打印以下内容:
(gdb) p xStep
$1 = 0.050000000000000003
(gdb) p static_cast<double>(xStepL)
$2 = 0.049999999999999996
知道为什么结果不同吗?我真的希望它是第二个。任何人都知道如何实现这一目标?
顺便说一句,我使用的是 GCC 4.3.4 和 GDB 7.2.50。