浮点型

  几乎所有计算机都支持二进制数据表示,即能直接识别二进制数据表示并具有相应的指令系统。

  通常采用的二进制定点数据表示主要有:符号数值、反码、补码以及带偏移增值码四种形式,其中最常用的是补码形式,这些都已在计算机组成原理课程中做了详细讨论,这里不再阐述。
 
  二进制浮点数的表示,由于不同机器所选的基值、尾数位长度和阶码位长度不同,因此对浮点数表示有较大差别,这就不利于软件在不同计算机间的移植。
 
美国IEEE(电子及电子工程师协会)为此提出了一个从系统结构角度支持浮点数的表示方法, 称之为IEEE标准754(IEEE,1985),当今流行的计算机几乎都采用这一标准。

  IEEE 754在标识符点数时, 每个浮点数均由3个部分组成:符号位S,指数部分E和尾数部分M。
  浮点数可采用以下四种基本格式:
  (1)单精度格式(32位):E=8位,M=23位。
  (2)扩展单精度格式:E≥11位,M≥31位。
  (3)双精度格式(64)位:E=11位,M=52位。
  (4)扩展双精度格式(64位):E≥15位,M≥63位。
  其中,单精度格式(32位)中的阶码为8位, 另有一位尾数的符号位S,处在最高位。


表示范围:
它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,
而在正数的时候是从 1.401298E-45 到 3.402823E38 。
有效数字:
尾数23,2^23=8388608,所以有效数字是七位,但是只能保证6位,因为7位表示不了全部。
C++ primer也是这样说的,float只能保证6位有效数字,double保证10位(第四版P32)。

ps:当初研究浮点型是为了一道题:

在进行数值计算时,如果某计算工具具有7位有效数字(如程序设计语言中的单精度运算),则在计算下列三个量
  A=1012,B=1,C=-1012
  的和时,如果采用不同的运算顺序,就会得到不同的结果,即
  A+B+C=1012+1+(-1012)=0
  A+C+B=1012+(-1012)+1=1
  而在数学上,A+B+C与A+C+B是完全等价的。因此,算法与计算公式是有差别的。在设计一个算法时,必须要考虑它的可行性,否则是不会得到满意结果的。

现在这道题暂时还没有解决。。。百度上有人回答了这个问题,但是我不理解,先贴出来吧

你没弄清有效数字的定义。7位有效数字,意思是float转成十进制之后只有前面7个数字是有效的,但不是说刚好会转成7个数字。这其实就是浮点数和定点数的区别。
你的a是pow(10,12),b是1,那么a+b其实已经脱离了float能精确表示的范围。也就是说,a+b的行为是不确定的,有可能完全等于a,也可能不等于a,两种情况都属正常。

ps:明白了,是有效位数的问题:
a = 10^12 = 1000000000000, b = 1 ,c = -10^12 = -1000000000000;
a+b=1000000000001,单精度浮点数的精度保证为6位(此处可以存7位,超3402823就只能保留6位了,详细看上面解释),所以a+b=1000000 * 10^6 则a+b约等于a;
之后的解释就明了了,略去咯。


以上内容部分摘自互联网http://zhidao.baidu.com/question/37438761
http://www.hudong.com/wiki/%E5%8D%95%E7%B2%BE%E5%BA%A6
http://baike.baidu.com/view/1007029.htm
http://topic.csdn.net/u/20081007/23/15f9cef9-04a8-4b85-b748-c870b99d3ff0.html
http://zhidao.baidu.com/question/246749897.html?fr=qrl&cid=93&index=2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中提到了postman和API Tester这两种工具,个人对使用postman不太喜欢,更倾向于使用API Tester。对于浮点型数字的精度问题,使用API Tester能够获得正常的响应,不存在精度丢失的问题。同样地,postman也可以进行测试。 引用中提到了整个demo验证一下Javascript的Number类型的精度问题。需要注意的是,模板引擎如thymeleaf并不是用JavaScript实现的,因此可能不会受到JavaScript Number类型精度问题的影响。 引用中描述了一个问题,即数据库中存储的值为1572460317496086530,而前端接口响应为1572460317496086500,存在精度损失的情况。然而,使用postman或其他REST工具调用接口时,响应是正常的。 综上所述,postman作为一种调试工具,可以用于测试浮点型数字的响应。API Tester也是一种可行的替代选择,能够正常地获取响应并避免精度丢失问题。同时,模板引擎如thymeleaf可能不会受到JavaScript Number类型精度问题的影响。在开发过程中,根据实际需求和个人偏好选择适合的工具。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【SpringBoot】Jackson序列化方式解决JavaScript超大数字精度损失问题](https://blog.csdn.net/weixin_43582081/article/details/128532968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值