朱莉娅奇怪的不精确错误

时间:2015-02-12 17:50:06

标签: julia

我有两个用git跟踪我程序的实例,所以我知道它们是同步的。一个实例在机器A中,另一个在机器B中。

机器A运行正常,但是当我去机器B时,我得到以下错误:

ERROR: InexactError()
in setindex! at array.jl:307
in setindex! at array.jl:345
in main at /path/to/main.jl:122
in include at ./boot.jl:246
in include_from_node1 at loading.jl:128
in process_options at ./client.jl:285
in _start at ./client.jl:354
in _start_3B_3587 at /home/usr/julia/usr/bin/../lib/julia/sys.so
while loading /path/to/main.jl, in expression starting on line 265

我不明白为什么会抛出错误。两台机器都有Julia的最后一个主版本:

Version 0.4.0-dev+3322 (2015-02-12 13:56 UTC)
Commit 1ec68b3* (0 days old master)

抛出错误的行是

array2 = zeros(Float64,NHn*2000)
for iRealiz in 1:2000
    ...
    ij = (iRealiz-1)*NHn
    egvals_ts, egvecs_ts = eig(timeser)
    array2[ij+1:ij+NHn] = egvals_ts
    ...
end

NHn是矩阵维度。

1 个答案:

答案 0 :(得分:14)

当您尝试将值Inexact Error转换为无法代表x值的T类型时,会引发x。例如,在朱莉娅0.4:

julia> convert(Int, 3.0)
3

julia> convert(Int, 3.2)
ERROR: InexactError()
 in convert at int.jl:189

julia> convert(UInt, -2)
ERROR: InexactError()

最后,在与您的案件相关的内容中:

julia> convert(Float64, 2+0.3im)
ERROR: InexactError()
 in convert at complex.jl:16

我的理论是,舍入误差(取决于特定的CPU)导致它在一台机器上返回复值特征值而不是另一台机器。