我有一个常数:
M_LN2 = 0.693147180559945309417
我尝试将其存储为:
M_LN2 = BigFloat(0.693147180559945309417)
结果似乎增加了过多的数字:
6.931471805599452862267639829951804131269454956054687500000000000000000000000000e-01
我尝试过:
M_LN2 = Float64(0.693147180559945309417)
但是它会截断值:
0.6931471805599453
您能否建议初始化常数的正确方法是什么? 谢谢!
答案 0 :(得分:7)
在编写BigFloat(0.693147180559945309417)
时,Julia构造了文字值Float64
的{{1}}值,该值已经执行了一些截断操作:
0.69314718055994530941
然后将结果值作为参数传递给julia> 0.69314718055994530941
0.6931471805599453
函数。为了避免这种情况,您必须避开数字文字的解析。最方便的方法是BigFloat
字符串宏:
big
内部可能只是执行julia> big"0.693147180559945309417"
6.931471805599453094169999999999999999999999999999999999999999999999999999999979e-01
来“手动”解析给定字符串中的值,而中间没有Julia的解释。
答案 1 :(得分:4)
秘密是用引号(“)括住您的数字。因此,值直接从String转换为BigFloat。
julia> println("Julia version ",VERSION);
M_LN2 = BigFloat("0.693147180559945309417")
Julia version 1.0.0
6.931471805599453094169999999999999999999999999999999999999999999999999999999979e-01