机器精度

简介: Julia 的 `eps` 函数用于计算浮点数的机器精度,即相邻可表示浮点数间的距离。例如,`eps(Float32)` 为 `1.1920929f-7`,`eps(Float64)` 为 `2.220446049250313e-16`。`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"
这个例子体现了一般原则,即相邻可表示的浮点数也有着相邻的二进制整数表示。

相关文章
机器精度
Julia 的 eps 函数显示了浮点数的机器精度,即最小可表示的非零差距。对于 Float32,它是 2.0^-23,对于 Float64,则为 2.0^-52。eps(x) 返回 x 到下一个浮点数的距离,间距在数轴上随数值大小变化,零点附近最密。此外,nextfloat 和 prevfloat 函数用于获取给定值之后或之前的浮点数,展示了相邻浮点数的二进制表示也相邻。
|
7月前
偏微分方程有了基础模型:样本需求数量级减少,14项任务表现最佳
【6月更文挑战第16天】研究人员提出Poseidon模型,减少求解偏微分方程(PDEs)的样本需求,提升效率。在15个挑战任务中,该模型在14项表现最优。基于scOT的多尺度架构, Poseidon降低了计算成本,但仍有泛化和资源限制。[论文链接](https://arxiv.org/pdf/2405.19101)**
97 4
|
7月前
|
机器学习/深度学习 人工智能 并行计算
从LLM中完全消除矩阵乘法,效果出奇得好,10亿参数跑在FPGA上接近大脑功耗
【6月更文挑战第15天】`Scalable MatMul-free LMs提出了一种无需矩阵乘法的新方法,使用MLGRU和MatMul-free GLU在保持性能的同时降低计算成本。实验显示,这种模型在FPGA上运行时,能效接近人脑,且在多种任务中与传统模型相当甚至更优。尽管有挑战,但该模型为高效、低功耗的语言处理开辟了新途径。[arXiv:2406.02528]`
162 1
|
8月前
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
38 4
|
8月前
|
数据可视化 C语言
使用R语言随机波动模型SV处理时间序列中的随机波动率
使用R语言随机波动模型SV处理时间序列中的随机波动率
|
数据采集 缓存 算法
m基于多属性决策判决算法的异构网络垂直切换matlab性能仿真,对比网络吞吐量,网络负载,平均切换次数,阻塞率,回报值
m基于多属性决策判决算法的异构网络垂直切换matlab性能仿真,对比网络吞吐量,网络负载,平均切换次数,阻塞率,回报值
220 0
|
算法 调度
m基于NSGAII的多机器多任务调度排序优化matlab仿真,考虑机器任务完成时间、机器总负荷和最大负荷
m基于NSGAII的多机器多任务调度排序优化matlab仿真,考虑机器任务完成时间、机器总负荷和最大负荷
119 0
m基于NSGAII的多机器多任务调度排序优化matlab仿真,考虑机器任务完成时间、机器总负荷和最大负荷
终端加负载的无损耗传输线重要参数的推导
终端加负载的无损耗传输线重要参数的推导
145 0
终端加负载的无损耗传输线重要参数的推导
|
机器学习/深度学习 算法 数据挖掘
机器为什么能学习
一、为何机器可以学习? 二、举例 三、机器学习跟数据挖掘的关系 四、总结
机器为什么能学习
|
存储 JSON JavaScript
精度丢失问题
BFF Client 使用的 npm 包 request-promise-native 请求微服务接口返回 ID 精度丢失
273 0
精度丢失问题