Julia中的任意精度浮动类型

Sub*_*osh 3 const julia

我有一个恒定的价值:

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

你能建议初始化常量的正确方法是什么?谢谢!

phi*_*ler 7

在你写的时候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中解释.