码迷,mamicode.com
首页 > 其他好文 > 详细

为什么浮点型的计算不准确?

时间:2017-03-09 22:48:04      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:为什么   存储   培训   专业   眼睛   二进制   回顾   十进制   基础   

  要想自己写点技术博客也真是尴尬呢。野路子出身,对所有东西都是只知道皮毛。

  简单回顾下自己吧,毕业于磨子桥技术学院种猪选育专业,读大学的时候为了做游戏进入了软件行业。尽管做出来的项目耦合的辣眼睛,崩溃性失败,还是希望好好在这个行业里经营下去。

  最近报了个机构,从头开始系统的提升自己的技术能力,以期早日达到专业水平。在学习过程中遇到一些引起自己思考的点,大概都是些很蠢的问题。记录到博客里,算是总结自己的技术能力重构经历吧。

  嗯,下面说正题。

  培训班刚开不久,还在学习一些基础的编程思想方面的东西。讲到数据类型的时候说到浮点型算不准。我的印象里当时做游戏的时候就遇到这个问题,不过那时候只管拿来用了也没思考过背后的原理。这次特地好好查了下为什么浮点型算不准:

  十进制小数转换为二进制小数的算法是*2取整知道没有小数了为止,但不论如何计算*2是永远不能消灭小数部分的,计算将无线进行下去。局限于浮点型变量的长度,所以精度自然会丢失。

  

  下面转一段前辈对float存储格式的总结(Java):

  

  将一个float型转化为内存存储格式的步骤为:

     (1)先将这个实数的绝对值化为二进制格式, 
     (2)将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。 
     (3)从小数点右边第一位开始数出二十三位数字放入第22到第0位。 
     (4)如果实数是正的,则在第31位放入“0”,否则放入“1”。 
     (5)如果n 是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或n=0,则第30位放入“0”。 
     (6)如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。

  

为什么浮点型的计算不准确?

标签:为什么   存储   培训   专业   眼睛   二进制   回顾   十进制   基础   

原文地址:http://www.cnblogs.com/gomokoro/p/6528215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!