可能的重复:
为什么 gdb 将 sqrt(3) 计算为 0? https://stackoverflow.com/questions/5122570/why-does-gdb-evaluate-sqrt3-to-0
这里是C新手。必须有一个明显的解释,为什么 gdb 在尝试内联使用 math.h 函数时会给出奇怪的输出。例如,fabs
下面的函数应该取绝对值,并返回一个双精度值。
(gdb) p cos(2*3.141/4)
$13 = 1073291460
(gdb) p fabs(-3)
$14 = 0
(gdb) p fabs(3)
$15 = 0
(gdb) p fabs(3.333)
$16 = 1
(gdb) p (double) fabs(-3.234)
$17 = 1
(gdb) p (double) fabs((double)-3.234)
$18 = 1
(gdb) p ((double(*)(double))fabs)(-3)
$19 = 682945
我正在使用的代码包含 math.h,并且实际代码似乎执行正确,尽管在 gdb 中内联放置的相同代码会产生奇怪的结果。我可以忽略它,但这似乎是一个很好的学习机会。
(Ref: http://lists.gnu.org/archive/html/gdb/2009-12/msg00004.html http://lists.gnu.org/archive/html/gdb/2009-12/msg00004.html)
gdb
缺少调试信息cos
函数,因此假设它是一个int cos(...)
函数,因此无法正确返回值(尤其是在 x86 上,因为存储浮点返回值和整数返回值的寄存器不同)。
这可以通过指定类型来解决:
(gdb) p ((double(*)(double))cos) (1.0)
$18 = 0.54030230586813977
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)