鱼C论坛

 找回密码
 立即注册
查看: 2688|回复: 7

sum求和的问题

[复制链接]
发表于 2016-7-29 11:38:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 豆、豆龙 于 2016-8-4 10:03 编辑

代码如下:
  1. tuple3 = (3.1,2.3,2.2)
  2. >>> sum(tuple3,3)
  3. 10.599999999999998
  4. >>> sum(tuple3,3.0)
  5. 10.599999999999998
复制代码

为什么会出现怎么诡异的结果
如果要得到结果 10.6(3.1+2.3+2.2+3)该怎么改
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-7-29 12:18:36 | 显示全部楼层
round(sum(tuple3,3.0),1)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-29 13:45:57 | 显示全部楼层
为什么会这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-29 13:51:25 | 显示全部楼层

因为 Python 中使用双精度浮点数来存储小数。在 Python 使用的 IEEE 754 标准(52M/11E/1S)中,8字节64位存储空间分配了52位来存储浮点数的有效数字,11位存储指数,1位存储正负号,即这是一种二进制版的科学计数法格式。虽然52位有效数字看起来很多,但麻烦之处在于,二进制小数在表示有理数时极易遇到无限循环的问题。其中很多在十进制小数中是有限的,比如十进制的 1/10,在十进制中可以简单写为 0.1 ,但在二进制中,他得写成:0.0001100110011001100110011001100110011001100110011001…..(后面全是 1001 循环)。因为浮点数只有52位有效数字,从第53位开始,就舍入了。这样就造成了标题里提到的”浮点数精度损失“问题。 舍入(round)的规则为“0 舍 1 入”,所以有时候会稍大一点有时候会稍小一点。

原文在这里
http://my.oschina.net/lionets/blog/186575
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-29 14:07:04 | 显示全部楼层
SixPy 发表于 2016-7-29 12:18
round(sum(tuple3,3.0),1)

这样就可以了  谢谢~~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-29 14:07:56 | 显示全部楼层
shuofxz 发表于 2016-7-29 13:51
因为 Python 中使用双精度浮点数来存储小数。在 Python 使用的 IEEE 754 标准(52M/11E/1S)中,8字节64 ...

棒  这样就懂了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-3 14:26:19 | 显示全部楼层
看帖学习一下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-3 18:38:03 | 显示全部楼层
shuofxz 发表于 2016-7-29 13:51
因为 Python 中使用双精度浮点数来存储小数。在 Python 使用的 IEEE 754 标准(52M/11E/1S)中,8字节64 ...

真的不知道这个东西,真的学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-22 00:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表