在Julia中是否有标准的方法来获得数值一致性
我知道,像0.1这样的小数如果不付出额外的努力,就不能准确地用二进制点表示在Julia中是否有标准的方法来获得数值一致性,julia,numerical-methods,zero,Julia,Numerical Methods,Zero,我知道,像0.1这样的小数如果不付出额外的努力,就不能准确地用二进制点表示 └─╼ julia Version 0.6.0 (2017-06-19 13:05 UTC) julia> 1.0 + 0.1 - 1.0 - 0.1 == 0 false julia> 1.0 + 0.1 - 1.0 - 0.1 8.326672684688674e-17 或者纯粹是象征性的 有几个舍入选项: 朱莉娅>圆形 四舍五入最接近的四舍五入最接近的四舍五入向上四舍五入 舍入
└─╼ julia
Version 0.6.0 (2017-06-19 13:05 UTC)
julia> 1.0 + 0.1 - 1.0 - 0.1 == 0
false
julia> 1.0 + 0.1 - 1.0 - 0.1
8.326672684688674e-17
或者纯粹是象征性的
有几个舍入选项:
朱莉娅>圆形
四舍五入最接近的四舍五入最接近的四舍五入向上四舍五入
舍入从零舍入最近舍入到零舍入模式
如果不展开关于数值稳定性的长期讨论,Julia有推荐的风格吗
这真的不是关于朱莉娅的问题。这将出现在任何使用IEEE浮点算法的语言中,因为Julia只使用标准。因此,标准规则适用
isapprox
(或\approx
测试浮点相同性≈) 适当设置公差BigFloat
s有其用途另外还有
sum\u kbn
,这可能是您的应用程序所需的全部:
julia> 1//10
1//10
julia> 1 + 1//10
11//10
julia> 1 + 1//10 - 1
1//10
julia> 1 + 1//10 - 1 - 1//10
0//1
julia> 1 + 1//10 - 1 - 1//10 == 0
true
一般来说,担心这种“不一致性”是没有用的。你的数字在十六进制中是错误的,这比你测量地球周长时原子的大小要小得多 在实践中,您所处理的量是以一定的分辨率和精度测量的,用近似模型描述,并用截断方法计算
注意误差的真正来源和放大误差的数值过程是很重要的。换句话说,对误差演算有一种感觉。转向精确算术通常是胡说八道。\≈ 非常值得了解,函数名似乎是isapprox而不是近似值。DecFP.jl看起来很有希望。有理数和大浮点数只是解决了我的用例的问题。
julia>@Base.Test.Test 1≈ 0.9999999 atol=10.0^-7测试通过julia>@Base.Test.Test 1≈ 0.9999999 atol=10.0^-8测试失败
您的用例是什么?您应该更具体一些。处理浮点运算的正确方法取决于应用程序。≈ 解决了它。DEET不相关。thx用于提问,tho。Q专门用于Julia方法。你回答得很好。@james的回答对描述加法案例特别有意思。但是≈ 确实让代码更具可读性和算术灵活性。当然,数字可能是危险的。thx!受你帖子的启发,我在Julia[.好东西]中找到了一个关于KBN的讨论。
julia> sum([1.0, 0.1, - 1.0, - 0.1])
8.326672684688674e-17
julia> sum_kbn([1.0, 0.1, - 1.0, - 0.1])
0.0
help?> sum_kbn
search: sum_kbn cumsum_kbn
sum_kbn(A)
Returns the sum of all elements of A, using the Kahan-Babuska-Neumaier compensated summation algorithm for additional accuracy.