Julia中的任意精度浮点类型

时间:2018-08-22 07:32:32

标签: const julia

我有一个常数:

M_LN2 = 0.693147180559945309417

我尝试将其存储为:

M_LN2 = BigFloat(0.693147180559945309417)

结果似乎增加了过多的数字:

  

6.931471805599452862267639829951804131269454956054687500000000000000000000000000e-01

我尝试过:

M_LN2 = Float64(0.693147180559945309417)

但是它会截断值:

  

0.6931471805599453

您能否建议初始化常数的正确方法是什么? 谢谢!

2 个答案:

答案 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