Julia 和 Matlab 之间的模数语句结果不同——在 Julia 中使用浮点数时避免舍入错误的最佳实践?

问题描述

我正在编写一个 Julia 程序,其中有一个需要满足以下条件的 Float64 变量 (val):

(val – m) % s == 0

ms 是存储为字符串的数字,例如:m = "0.00010000"s = "0.00010000"

如果我在 Matlab 中进行以下计算:

val = 0.2383;
m = "0.00010000";
s = "0.00010000";
result = mod((val - str2double(m)),str2double(s)) == 0;
disp( result )

答案被评估为真。即满足 (val – m) % s == 0 条件。

然而,当我尝试在同一个程序的 Julia 实现中做同样的事情时,我遇到了问题:

val = 0.2383;
m = "0.00010000";
s = "0.00010000";
result = ((val - parse( Float64,m )) % parse( Float64,s )) == 0;
println( result ) 

相同计算的 Julia 版本现在变为错误

这可能是由于浮点舍入错误造成的,例如 Julia 中 val – parse(Float64,m) 的结果是 0.23820000000000002,它不能被 0.0001 整除。

所以我的问题是:在 Julia 中,我如何调整我的计算,以便像在 Matlab 代码中那样满足条件?我能否以不同的方式解析我的 val/m/s 变量以避免四舍五入问题?

理想情况下,由于速度问题,我希望避免使用诸如“Decimals”之类的包并坚持使用快速变量类型。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)