double类型变量的奇怪值:-nan(0x8000000000000) [英] Strange value of the double type variable: -nan(0x8000000000000)
问题描述
添加操作后,我对currdisk-> currangle的值感到困惑。最初currdisk-> currangle的值是0.77500000000000013,但是在添加操作之后,它改为-nan(0x8000000000000),有人可以解释一下吗?谢谢!以下是gdb调试的场合。
3338 currdisk-> currangle + =(simtime - seg-> time; / currdisk-> rotatetime;
(gdb)p currdisk-> currangle
$ 28 = 0 。 77500000000000013
(gdb)p(simtime - seg-> time)/ currdisk-> rotatetime
$ 29 = 0 。 00833333333333325
(gdb)p(simtime - seg->时间)
$ 30 = 0 。< span class =code-digit> 092592592592591672
(gdb)p currdisk-> rotatetime
$ 31 = 11 。< span class =code-digit> 111111111111111
(gdb)n
(gdb)p currdisk-> currangle
$ 32 = -nan(0x8000000000000)
(gdb)p / x( char [ 8 ])currdisk-> currangle
$ 52 = {0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0xff}
(gdb)
然后我改变
currdisk-> currangle + =(simtime - seg-> time)/ currdisk-> rotatetime;
to
double tmp1 =( simtime - seg-> time)/ currdisk-> rotatetime;
currdisk-> currangle + = tmp1;
currdisk-> currangle的值是正常的。任何人都可以解释这个令人困惑的现象吗?
28 = 0 。 77500000000000013
(gdb)p(simtime - seg->时间)/ currdisk-> rotatetime
29 = 0 。 00833333333333325
(gdb)p(simtime - seg-> time)
< blockquote> 30 = 0 。 092592592592591672
(gdb)p currdisk-> rotatetime
I am confused by the value of "currdisk->currangle" after adding operation. Initially the value of "currdisk->currangle" is 0.77500000000000013, but after adding operation, it's changed to "-nan(0x8000000000000)", Can anyone explain ? Thanks! The following is the occasion of gdb debugging.
3338 currdisk->currangle += (simtime - seg->time) / currdisk->rotatetime;
(gdb) p currdisk->currangle
$28 = 0.77500000000000013
(gdb) p (simtime - seg->time) / currdisk->rotatetime
$29 = 0.00833333333333325
(gdb) p (simtime - seg->time)
$30 = 0.092592592592591672
(gdb) p currdisk->rotatetime
$31 = 11.111111111111111
(gdb) n
(gdb) p currdisk->currangle
$32 = -nan(0x8000000000000)
(gdb) p/x (char[8])currdisk->currangle
$52 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff}
(gdb)
Then I change
currdisk->currangle += (simtime - seg->time) / currdisk->rotatetime ;
to
double tmp1 = (simtime - seg->time) / currdisk->rotatetime;
currdisk->currangle += tmp1;
The value of currdisk->currangle is normal. Can anyone explain the confusing phenomenon ?
28 = 0.77500000000000013 (gdb) p (simtime - seg->time) / currdisk->rotatetime
29 = 0.00833333333333325 (gdb) p (simtime - seg->time)
30 = 0.092592592592591672 (gdb) p currdisk->rotatetime
这篇关于double类型变量的奇怪值:-nan(0x8000000000000)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!