You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中获取单、双精度浮点数的机器Epsilon值

获取单精度浮点数Epsilon的解决方案

嘿,我来帮你搞定Python里获取单精度浮点数Epsilon的问题~你已经成功实现了双精度Epsilon的获取,这部分做得很棒!接下来咱们聊聊怎么拿到单精度的那个值(也就是你说的C++里的5.960464*10**-8)。

先回顾你的问题

你需要获取机器中单、双精度浮点数的Epsilon值,已经写出了双精度的实现代码:

import sys
import numpy as np
epsilon=sys.float_info.epsilon/2.0 #Using the System Info, in python float is taken as double precision automatically
print("Value of Machine epsilon double Precision is:",epsilon)
epsilon1 =1.0 #Using the while Loop, we see both values comes out to be same
while(1+epsilon1!=1):
    epsilon1 = epsilon1*0.5
print("Value of Machine epsilon double Precision is:",epsilon1)

但不知道怎么在Python里获取单精度的Epsilon值。

核心原因

Python里默认的float类型是64位双精度,所以如果不特意指定类型,所有浮点运算都会用双精度执行,自然拿不到单精度的精度参数。咱们需要显式使用单精度(32位)浮点数类型来计算。

两种获取单精度Epsilon的方法

方法1:借助numpy直接获取

numpy提供了np.finfo函数,可以直接查询指定浮点类型的机器精度参数。结合你双精度代码里除以2的逻辑,代码如下:

import numpy as np

# 对应你双精度代码的逻辑,取单精度eps的一半
single_epsilon = np.finfo(np.float32).eps / 2.0
print("Value of Machine epsilon Single Precision is:", single_epsilon)

运行后会输出5.9604644775390625e-08,和你提到的C++中的值完全一致。

方法2:用while循环模拟(单精度版本)

和你双精度的循环思路一样,但要强制所有变量和运算都用单精度类型,避免Python默认用双精度计算:

import numpy as np

epsilon_single = np.float32(1.0)
# 确保循环里的运算都是单精度
while np.float32(1.0) + epsilon_single != np.float32(1.0):
    epsilon_single = np.float32(epsilon_single * 0.5)
print("Value of Machine epsilon Single Precision is:", epsilon_single)

这个方法也会得到和方法1一样的结果,完美匹配你要的单精度Epsilon值。

补充说明

为什么要除以2?因为你双精度代码里的逻辑是取“最小的x使得1+x == 1”的前一个值(也就是最后一个满足1+x !=1的x的一半),而numpy的eps本身是“最小的x使得1+x !=1”,所以除以2后就和你双精度代码的输出逻辑完全对齐啦。

内容的提问来源于stack exchange,提问作者sheel uniyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:47:10