double类型变量的奇怪值:-nan(0x8000000000000) [英] Strange value of the double type variable: -nan(0x8000000000000)

查看:1009
本文介绍了double类型变量的奇怪值:-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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆