当前位置: 首页 > 面试题库 >

python浮点数

蒋默
2023-03-14
问题内容

我很困惑为什么在这种情况下python为什么要添加一些额外的十进制数,请帮助解释

>>> mylist = ["list item 1", 2, 3.14]
>>> print mylist ['list item 1', 2, 3.1400000000000001]

问题答案:

浮点数是一个近似值,它们不能精确存储十进制数。因为它们试图仅用64位表示很大范围的数字,所以它们必须在某种程度上近似。

意识到这一点非常重要,因为它会导致一些怪异的副作用。例如,你可能会非常合理认为,十批的总和0.11.0。尽管这似乎合乎逻辑,但在浮点数方面也是错误的:

>>> f = 0.0
>>> for _ in range (10):
...  f += 0.1
...
>>> print f == 1.0
False
>>> f
0.99999999999999989
>>> str(f)
1.0

您可能会认为n / m * m == n。浮点世界再次不同意:

>>> (1.0 / 103.0) * 103.0
0.99999999999999989

或许正如奇怪的是,人们可能会认为,对于所有nn + 1 != n。在浮点土地上,数字就是这样的:

>>> 10.0**200
9.9999999999999997e+199
>>> 10.0**200 == 10.0**200 + 1
True
# How much do we have to add to 10.0**200 before its 
# floating point representation changes?
>>> 10.0**200 == 10.0**200 + 10.0**183
True
>>> 10.0**200 == 10.0**200 + 10.0**184
False

请参阅每个计算机科学家应该了解的有关浮点数的内容,以获取有关这些问题的出色摘要。

如果需要精确的十进制表示形式,请查看十进制模块,该模块自2.4起成为python标准库的一部分。它允许您指定有效数字的数量。缺点是,它比浮点运算要慢得多,因为浮点运算是在硬件中实现的,而十进制运算纯粹是在软件中发生的。它也有其自身的不精确性问题,但是如果您需要精确表示十进制数字(例如,对于金融应用程序),则是理想选择。

例如:

>>> 3.14
3.1400000000000001
>>> import decimal
>>> decimal.Decimal('3.14')
>>> print decimal.Decimal('3.14')
3.14
# change the precision:
>>> decimal.getcontext().prec = 6
>>> decimal.Decimal(1) / decimal.Decimal(7)
Decimal('0.142857')
>>> decimal.getcontext().prec = 28
>>> decimal.Decimal(1) / decimal.Decimal(7)
Decimal('0.1428571428571428571428571429')


 类似资料:
  • 问题内容: 谁能解释模运算符在Python中如何工作?我不明白为什么。 问题答案: 其实,这是不正确的3.5 % 0.1是0.1。你可以很容易地测试一下: 实际上,在大多数系统上是。但是,在某些版本的Python上是: 现在,你可能想知道为什么是而不是。这是由于通常的浮点舍入问题。如果你还没有阅读每位计算机科学家应该知道的有关浮点运算的知识,那么你应该-至少是对此问题的简要概述。 还需要注意的是3

  • 问题内容: 我正在读取一个带有浮点数的文本文件,这些数字都带有1或2个小数点。我正在使用将线转换为浮点数,并在失败的情况下引发。我将所有花车存储在列表中。打印时,我想将其打印为2个小数位的浮点数。 假设我有一个文本文件,其编号为-3,65、9,17、1。我阅读了每个文件,然后将它们转换为float并将它们附加到列表中。现在在Python 2中,调用return 。但是在Python 3中,-3.6

  • 在编程语言中,小数通常以浮点数的形式存储。浮点数和定点数是相对的:小数在存储过程中如果小数点发生移动,就称为浮点数;如果小数点不动,就称为定点数。 如果你对浮点数的底层存储格式不了解,请猛击:小数在内存中是如何存储的,揭秘诺贝尔奖级别的设计(长篇神文) Python 中的小数有两种书写形式: 1) 十进制形式 这种就是我们平时看到的小数形式,例如 34.6、346.0、0.346。 书写小数时必须

  • 问题内容: 这里发生了什么?如何转换为字符串并将结果值转换为浮点数? 我在Windows上使用Python 2.5.4。 问题答案: 给予并且可以。这是由于表示浮点数的方式(请参阅此Wikipedia文章) 注意:或会给您预期的结果,但如果需要精度,则应使用Decimal。

  • 我编写了一个程序来演示Go中的浮点错误: 它打印: 这与用C编写的相同程序的行为相匹配(使用双代码类型) 但是,如果改用,程序就会陷入无限循环!如果将C程序修改为使用而不是,它将打印 为什么在使用时,Go程序的输出与C程序的输出不一样?

  • 3.2. 浮点数 Go语言提供了两种精度的浮点数,float32和float64。它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的CPU支持。 这些浮点数类型的取值范围可以从很微小到很巨大。浮点数的范围极限值可以在math包找到。常量math.MaxFloat32表示float32能表示的最大数值,大约是 3.4e38;对应的math.MaxFloat64常量大约是1.8