gpt4 book ai didi

gdb 中的 C++ static_cast 返回与 gcc 不同的结果

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:59 26 4
gpt4 key购买 nike

我正在调查 gcc 和 gdb 在将 static_casting long double 转换为 double 时的奇怪行为的问题。我有类似下面的代码:

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。

最佳答案

我认为问题是 static_casts 没有被调用相同的值。代码中的值使用更高精度的寄存器值调用,而从 gdb 调用的值将使用内存中的 long double。我不确定允许编译器执行此操作的确切位置,但我猜这是一个 - 所以答案最终可能会相差一个 elp。

关于gdb 中的 C++ static_cast 返回与 gcc 不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11777523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com