我有一个恒定的价值:
M_LN2 = 0.693147180559945309417
Run Code Online (Sandbox Code Playgroud)
我试着把它存储为:
M_LN2 = BigFloat(0.693147180559945309417)
Run Code Online (Sandbox Code Playgroud)
结果似乎是添加了太多的额外数字:
6.931471805599452862267639829951804131269454956054687500000000000000000000000000e-01
我试过了:
M_LN2 = Float64(0.693147180559945309417)
Run Code Online (Sandbox Code Playgroud)
但它正在削减价值:
0.6931471805599453
你能建议初始化常量的正确方法是什么?谢谢!
在你写的时候BigFloat(0.693147180559945309417),Julia构造了一个Float64文字值的值0.69314718055994530941,它已经执行了一些截断:
julia> 0.69314718055994530941
0.6931471805599453
Run Code Online (Sandbox Code Playgroud)
然后将结果值作为参数传递给BigFloat函数.为避免这种情况,您必须避免解析数字文字.最方便的方法是big字符串宏:
julia> big"0.693147180559945309417"
6.931471805599453094169999999999999999999999999999999999999999999999999999999979e-01
Run Code Online (Sandbox Code Playgroud)
其中内部可能只是parse(BigFloat, "0.693147180559945309417")"手动"解析给定字符串中的值,而不需要从Julia中解释.