关于运算时的精度丢失问题

Arizona 2013-09-29 09:45:56
大家都知道float运算时,可能会存在精度丢失的问题,例如 1/3 * 3 不等于1 ,
但是我有一个问题希望大家帮助解答,如下是我的测试代码
float b=0.35F*100;
return 0;

在直接计算 1.0F* 100 而不赋值给b 时,得到的数据大小是 34.9999999999 这点是正常的,
但是在赋值给float类型的b时,b的值 却为 35.0,而不是34.999999,
这是为什么?我猜测是优化了的问题,但是什么时候会存在这种优化?怎么优化的求解释



还有下面一个问题在,这是为什么
...全文
318 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Arizona 2013-10-14
  • 打赏
  • 举报
回复
目前已经清楚了,针对第一个问题赋值给float时,自动变35.0 的问题,目前推测是经过优化后的结果,应该是编译器做的工作。针对第二个问题,小数常量默认是作为double类型进行运算的,所以最后的结果精度会比Float的精度高,更加接近于正确值,而Float只有6位的精度,double的精度位数更多,具体可以百度或者谷歌
hyxall 2013-09-29
  • 打赏
  • 举报
回复
貌似不太清楚lz到底讲的,但大致理解,
Arizona 2013-09-29
  • 打赏
  • 举报
回复
没人会吗??

1,978

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧