机器精度

简介: Julia 的 eps 函数用于计算浮点数的机器精度,即相邻可表示浮点数间的距离。例如,eps(Float32) 为 2.0^-23,eps(Float64) 为 2.0^-52。eps(x) 可返回 x 与下一个浮点数的差值,且 nextfloat 和 prevfloat 函数分别返回大于或小于给定值的相邻浮点数。浮点数的间距在数值变化时并非恒定,靠近零时更密集,远离零时指数级减小。

机器精度

大多数实数都无法用浮点数准确地表示,因此有必要知道两个相邻可表示的浮点数间的距离,它通常被叫做机器精度。

Julia 提供了 eps 函数,它可以给出 1.0 与下一个 Julia 能表示的浮点数之间的差值:

实例
julia> eps(Float32)
1.1920929f-7

julia> eps(Float64)
2.220446049250313e-16

julia> eps() # 与 eps(Float64) 相同
2.220446049250313e-16
这些值分别是 Float32 中的 2.0^-23 和 Float64 中的 2.0^-52。eps 函数也可以接受一个浮点值作为参数,然后给出这个值与下一个可表示的浮点数值之间的绝对差。也就是说,eps(x) 产生一个和 x 类型相同的值,并且 x + eps(x) 恰好是比 x 更大的下一个可表示的浮点值:

实例
julia> eps(1.0)
2.220446049250313e-16

julia> eps(1000.)
1.1368683772161603e-13

julia> eps(1e-27)
1.793662034335766e-43

julia> eps(0.0)
5.0e-324
两个相邻可表示的浮点数之间的距离并不是常数,数值越小,间距越小,数值越大,间距越大。换句话说,可表示的浮点数在实数轴上的零点附近最稠密,并沿着远离零点的方向以指数型的速度变得越来越稀疏。根据定义,eps(1.0) 与 eps(Float64) 相等,因为 1.0 是个 64 位浮点值。

Julia 也提供了 nextfloat 和 prevfloat 两个函数分别返回基于参数的下一个更大或更小的可表示的浮点数:

实例
julia> x = 1.25f0
1.25f0

julia> nextfloat(x)
1.2500001f0

julia> prevfloat(x)
1.2499999f0

julia> bitstring(prevfloat(x))
"00111111100111111111111111111111"

julia> bitstring(x)
"00111111101000000000000000000000"

julia> bitstring(nextfloat(x))
"00111111101000000000000000000001"
这个例子体现了一般原则,即相邻可表示的浮点数也有着相邻的二进制整数表示。

相关文章
|
3天前
R语言ECM误差修正模型、均衡修正模型、受限VECM、协整检验、单位根检验即期利率市场数据
R语言ECM误差修正模型、均衡修正模型、受限VECM、协整检验、单位根检验即期利率市场数据
机器精度
Julia 的 eps 函数揭示了浮点数的机器精度,即最小可表示的间隔。对于 Float32,此间隔为 2.0^-23,Float64 为 2.0^-52。eps(x) 返回 x 到其相邻浮点数的距离,间距随数值大小变化,附近零点处最密。nextfloat 和 prevfloat 函数则用于获取浮点数的相邻值。例如,eps(1.0) 等于 eps(Float64),且二进制表示显示相邻浮点数的差异。
|
1天前
15.求函数:sin(x)=x/1! - x3/3! + x5/5! -x7/7! +…,最后一项精度不低于0.000001
15.求函数:sin(x)=x/1! - x3/3! + x5/5! -x7/7! +…,最后一项精度不低于0.000001
10 4
|
3天前
LabVIEW为什么浮点数会丢失精度
LabVIEW为什么浮点数会丢失精度
10 2
|
11月前
10×一个样本测多少数据量(G)合适?
10×一个样本测多少数据量(G)合适?
|
12月前
|
机器学习/深度学习 缓存 算法
YOLOv5-Lite 树莓派实时 | 更少的参数、更高的精度、更快的检测速度(C++部署分享)(一)
YOLOv5-Lite 树莓派实时 | 更少的参数、更高的精度、更快的检测速度(C++部署分享)(一)
285 0
|
12月前
|
tengine 数据可视化 API
YOLOv5-Lite 树莓派实时 | 更少的参数、更高的精度、更快的检测速度(C++部署分享)(二)
YOLOv5-Lite 树莓派实时 | 更少的参数、更高的精度、更快的检测速度(C++部署分享)(二)
273 0
|
数据安全/隐私保护
DetectGPT:使用概率曲率的零样本机器生成文本检测
DetectGPT的目的是确定一段文本是否由特定的llm生成,例如GPT-3。为了对段落 x 进行分类,DetectGPT 首先使用通用的预训练模型(例如 T5)对段落 ~xi 生成较小的扰动。然后DetectGPT将原始样本x的对数概率与每个扰动样本~xi进行比较。如果平均对数比高,则样本可能来自源模型。
214 0
|
机器学习/深度学习 自然语言处理 监控
如何解决混合精度训练大模型的局限性问题
混合精度已经成为训练大型深度学习模型的必要条件,但也带来了许多挑战。在这篇文章中,我们将讨论混合精确训练的数值稳定性问题。
345 0
如何解决混合精度训练大模型的局限性问题