典型的检查对float精度理解的代码

  ...
1
vx = 0.0000007f * (rand()%9000-rand()%9000); 2 vy = 0.0005f * (rand()%9000); 3 vz = 0.0000001f * (rand()%9000); 4 pList_particle[i].m_velocity = Vector3(vx,vy,vz);
...

1,3行代码的vx和vz的值域可以通过数学方法计算,而0.0000007f和0.0000001f在运算时是否存在精度丢失从而影响到运算结果?

分析这种问题只能从float存储格式入手,先把两个浮点数化为二进制形式.网上有很多文章,推荐看:http://www.cnblogs.com/yewsky/articles/1864934.html的举例:0.2356存储格式

最起码的也得知道:float是32bit,1bit是float变量的符号位,8bit是float变量的二进制科学计数法的指数位(-127~128),23bit是float变量的二进制科学计数法的尾数位.

 

posted @ 2014-11-27 23:33  一名老程序员  阅读(181)  评论(0编辑  收藏  举报