以我的理解,sys.float_info.max
是最大的浮点值。但是, 似乎无法比较大的值 。
import math
import sys
m = sys.float_info.max # type 'float'
m == m # True
m < m # False
m > m # False
m == m-1.0 # True
m < m-1.0 # False
m > m-1.0 # False
m == m-1e100 # True
m < m-1e100 # False
m > m-1e100 # False
m == m-1e300 # False
m > m-1e300 # True
m < m-1e300 # False
我认为那是因为精度有限吗?如果可以,我可以在什么数值范围内安全操作?
上面的代码是在Python 3.5.2上运行的。
在运行Python的典型计算机上,Python浮点数有53位精度。如果尝试进一步,Python将消除最小的部分,以便可以正确表示数字。
因此,值1被吸收或取消,以便能够代表您要计算的高值。
通过减去(或加)乘以浮点epsilon的值来获得极限。
在我的机器上:
maxfloat == 1.7976931348623157e+308
epsilon == 2.220446049250313e-16
样本测试代码
import math
import sys
m = sys.float_info.max # type 'float'
eps = sys.float_info.epsilon
print(m == m-(m*(eps/10))) # True
print(m == m-(m*eps)) # False
m*eps
是您必须减去的最小值,以使比较失败。它总是相对于m
价值。
问题内容: 在JBox2d中,存在以下代码: 我想知道这里的float <-> int位转换函数的作用是什么。这是否提供解决Java的float比较不准确性问题的方法(如果可能的话)?还是完全不同?我想知道它是否可以替代epsilon方法: PS。为了完整和有趣,这里是: 仅供参考,我可以完美地理解为什么在hashCode()中使用转换函数-哈希ID必须是整数。 问题答案: 解释中可以找到约书亚B
问题内容: 在Python中,比较float与几乎相等的最佳方法是什么? 问题答案: Python 3.5添加了PEP 485中描述的和功能。 如果你使用的是Python的早期版本,则等效功能在文档中给出。 是一个相对容差,它乘以两个参数中的较大者;当值变大时,它们之间的允许差异也会变大,同时仍将它们视为相等。 是在所有情况下均按原样应用的绝对公差。如果差异小于这些公差中的任何一个,则认为值相等。
问题内容: 我正在研究为项目使用哪种模拟框架,并将其范围缩小到JMockit和Mockito。 我注意到 Mockito 在 Stackoverflow上 被评为“ Java最佳模拟框架 ”。 在比较 JMockit 的“ 模拟工具比较矩阵 ”上的功能时,看来 JMockit 具有多个不同的功能。 是否有人有 Mockito 可以做到的任何特定信息(无意见),而 JMockit 则无法实现,反之亦
问题内容: 在Python中处理此问题的推荐方法是什么? 当然在某个地方有一个标准的库函数吗? 问题答案: Python 3.5添加了PEP 485中描述的和功能。 如果你使用的是Python的早期版本,则等效功能在文档中给出。 是一个相对容差,它乘以两个参数中的较大者;当值变大时,它们之间的允许差异也会变大,同时仍将它们视为相等。 是在所有情况下均按原样应用的绝对公差。如果差异小于这些公差中的任
本文向大家介绍为什么str(float)在Python 3中比Python 2返回更多的数字,包括了为什么str(float)在Python 3中比Python 2返回更多的数字的使用技巧和注意事项,需要的朋友参考一下 在Python 2.7中,一个float的repr返回最接近十七位数的十进制数;这足以精确地识别每个可能的IEEE浮点值.浮点数的str类似地工作,除了它将结果限制为12位数;对于
问题内容: 输出: 123456789 123456792 问题答案: 该类型使用与(32位)相同的位数表示比仅表示整数更大范围的浮点数。 这会导致精度下降,因为并非每个数字都可以用来精确表示。仅24位用于表示数字的小数部分(包括符号位),而其他8位用于表示指数。 如果将此值分配给,则不会有任何精度损失,因为它具有64位,并且其中32个以上的位用于表示小数。 这是更详细的说明: 123456789