gdb在使用math.h函数时给出奇怪的输出

可能重复:
为什么gdb将sqrt(3)评估为0?

C新手在这里。 当尝试在线使用math.h函数时,必须有一个明显的解释为什么gdb会给出奇怪的输出。 例如,下面的fabs函数应该取绝对值,并返回一个double。

 (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中内嵌的相同代码会产生奇怪的结果。 我可以忽略它,但这似乎是一个很好的学习机会。

(参考: 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