0.1+0.2不精确问题
请问为什么只有0.1+0.2有问题,0.1+0.3,0.2+0.3却没问题,到底是0.1有问题还是0.2有问题同理1.1+0.1有问题,但1.1+0.2却没问题
Fraction(1.1)=Fraction(11/10)为什么不等于Fraction(11,10) 这是小数计算精度的问题,要用到一个模块import decimal
a = decimal.Decimal("0.1")
b = decimal.Decimal("0.2")
print(a + b)
0.3:
小甲鱼的动动手第 0 题:
https://fishc.com.cn/forum.php?mod=viewthread&tid=146944&extra=page%3D1%26filter%3Dtypeid%26typeid%3D760 python爱好者. 发表于 2022-2-11 10:45
小甲鱼的动动手第 0 题:
https://fishc.com.cn/forum.php?mod=viewthread&tid=146944&extra=page%3D1%26f ...
是动动手的答案部分 所有的小数计算都要用到 decimal 模块,
您的第二个问题也是同理!
计算机存储浮点型数据时,进行进制转换时导致产生误差
小数转换过程中会有无限尾数的情况,此时计算机会自动进行截取,导致浮点型必然会出现误差
所以 1.1 + 0.1 ,但 1.1 + 0.2 却没问题是因为计算机在截取 1.1 + 0.1 时 恰好截取后前面的都为 0 了
而 1.1 + 0.2 截取后却有一个小误差值被同时截取了,所以导致输出的结果差异
用 decimal 模块可以更加精确的进行浮点型运算,但是误差是不可避免的,只是 decimal 精度比 float 精度高
python爱好者. 发表于 2022-2-11 10:47
所有的小数计算都要用到 decimal 模块,
您的第二个问题也是同理!
class fractions.Fraction(decimal)
解析:返回一个与 decimal.Decimal 参数具有相同值的 Fraction 实例。
注意:由于众所周知的浮点数问题,导致 Fraction(1.1) 并不完全等于 11 / 10,所以 Fraction(Decimal(1.1)) 也不会返回 Fraction(11, 10)。
出处:https://fishc.com.cn/forum.php?mod=viewthread&tid=148763&extra=page%3D1%26filter%3Dtypeid%26typeid%3D768 python爱好者. 发表于 2022-2-11 10:44
这是小数计算精度的问题,要用到一个模块:
感谢您的回复,我受益良多。请问您:
1.Decimal("1.1")和Decimal(1.1)为什么不同?
>>> Decimal(1.1)
Decimal('1.100000000000000088817841970012523233890533447265625')
>>> Decimal('1.1')
Decimal('1.1')
所以Decimal(1.1)是得出的是实际上有误差的情况,而Decimal('1.1')是去除误差的情况么?
2.
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> 2476979795053773/2251799813685248
1.1
>>> 11/10
1.1
这两个1.1是精确的么,有什么区别?
我认为,这两个1.1都不是精确的,这两个1.1结果都等于=
print(Decimal('1.100000000000000088817841970012523233890533447265625'))
只是截取的这个数前面的1.1留下来了。
1.1最精确的解是Fraction(11,10)=Fraction(Decimal('1.1')),但是还是存在一定误差,误差是不可避免的
因此1.1是无法被完全精确解出来的。若想进行浮点数运算必用到Decimal才可以,Decimal相对精准。
您觉得我说的对么?如有问题希望得到您指正。{:5_92:}
Twilight6 发表于 2022-2-11 10:53
计算机存储浮点型数据时,进行进制转换时导致产生误差
小数转换过程中会有无限尾数的情况,此时计算机 ...
感谢您的回复,我受益良多。请问您:
1.Decimal("1.1")和Decimal(1.1)为什么不同?
>>> Decimal(1.1)
Decimal('1.100000000000000088817841970012523233890533447265625')
>>> Decimal('1.1')
Decimal('1.1')
所以Decimal(1.1)是得出的是实际上有误差的情况,而Decimal('1.1')是去除误差的情况么?
2.
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> 2476979795053773/2251799813685248
1.1
>>> 11/10
1.1
这两个1.1是精确的么,有什么区别?
我认为,这两个1.1都不是精确的,这两个1.1结果都等于=
print(Decimal('1.100000000000000088817841970012523233890533447265625'))
只是截取的这个数前面的1.1留下来了。
1.1最精确的解是Fraction(11,10)=Fraction(Decimal('1.1')),但是还是存在一定误差,误差是不可避免的
因此1.1是无法被完全精确解出来的。若想进行浮点数运算必用到Decimal才可以,Decimal相对精准。
您觉得我说的对么?如有问题希望得到您指正。{:5_92:}
python爱好者. 发表于 2022-2-11 10:45
小甲鱼的动动手第 0 题:
https://fishc.com.cn/forum.php?mod=viewthread&tid=146944&extra=page%3D1%26f ...
谢谢您{:5_91:} 李二蛋 发表于 2022-2-11 11:31
感谢您的回复,我受益良多。请问您:
1.Decimal("1.1")和Decimal(1.1)为什么不同?
>>> Decimal(1.1)
全对{:10_323:} 李二蛋 发表于 2022-2-11 11:33
谢谢您
给个最佳呗 python爱好者. 发表于 2022-2-11 10:53
class fractions.Fraction(decimal)
解析:返回一个与 decimal.Decimal 参数具有相同值的 Fraction 实 ...
感谢您的回复,我受益良多。请问您:
1.Decimal("1.1")和Decimal(1.1)为什么不同?
>>> Decimal(1.1)
Decimal('1.100000000000000088817841970012523233890533447265625')
>>> Decimal('1.1')
Decimal('1.1')
所以Decimal(1.1)是得出的是实际上有误差的情况,而Decimal('1.1')是去除误差的情况么?
2.
>>> Fraction(1.1)
Fraction(2476979795053773, 2251799813685248)
>>> 2476979795053773/2251799813685248
1.1
>>> 11/10
1.1
这两个1.1是精确的么,有什么区别?
我认为,这两个1.1都不是精确的,这两个1.1结果都等于=
print(Decimal('1.100000000000000088817841970012523233890533447265625'))
只是截取的这个数前面的1.1留下来了。
1.1最精确的解是Fraction(11,10)=Fraction(Decimal('1.1')),但是还是存在一定误差,误差是不可避免的
因此1.1是无法被完全精确解出来的。若想进行浮点数运算必用到Decimal才可以,Decimal相对精准。
您觉得我说的对么?如有问题希望得到您指正。{:5_92:}
李二蛋 发表于 2022-2-11 11:34
感谢您的回复,我受益良多。请问您:
1.Decimal("1.1")和Decimal(1.1)为什么不同?
>>> Decimal(1.1)
全对{:10_323:} python爱好者. 发表于 2022-2-11 11:34
全对
真的嘛,我不太确定{:5_96:}希望给出指正 李二蛋 发表于 2022-2-11 11:36
真的嘛,我不太确定希望给出指正
这第一题我不确定,其他的都能确定,因为我也没有去深入了解这个模块 李二蛋 发表于 2022-2-11 11:32
感谢您的回复,我受益良多。请问您:
1.Decimal("1.1")和Decimal(1.1)为什么不同?
>>> Decimal(1.1)
所以Decimal(1.1)是得出的是实际上有误差的情况,而Decimal('1.1')是去除误差的情况么?
说啦 误差不能去除,只是 Decimal 精度高,可以适当减小一些误差
这两个1.1是精确的么,有什么区别?
结果中的 1.1 ,因为误差部分被截取掉了,后续你解释的没毛病
页:
[1]