在Julia 1.0.0 REPL中,我得到以下行为。第一行是文档中的示例 https://docs.julialang.org/en/v1/base/math/#Base.Rounding.RoundFromZero
public void Dijkstra(int start) {
int[] D = new int[E.length];
for (int i = 0; i < E.length; i++) {
D[i] = Integer.MAX_VALUE;
}
D[start] = 0;
PriorityQueue<Integer> Q = new PriorityQueue<>();
Q.add(start);
while (!Q.isEmpty()) {
Integer u = Q.poll();
System.out.println(u + " ");
for (int z = 0; z < E[u].size(); z++) {
Edge e = E[u].get(z);
if ((D[u] + e.w) < D[e.v]) {
D[e.v] = D[u] + e.w;
Q.add(e.v);
}
}
}
System.out.println(D[E.length - 1]);
}
我不清楚上面示例中5的含义。例如,
julia> BigFloat("1.0000000000000001", 5, RoundFromZero)
1.06
似乎将要四舍五入的两个数字应四舍五入为REPL中的不同输出。我想念什么?
答案 0 :(得分:2)
该值从零开始舍入为5
位精度,并且在两种情况下均等于1.0625
。您可以使用以下方法进行检查:
julia> Float64(BigFloat("1.01", 5, RoundFromZero))
1.0625
或
julia> big(0)+BigFloat("1.01", 5, RoundFromZero)
1.0625
或(这是黑客行为,不应该这样做):
julia> x = BigFloat("1.01", 5, RoundFromZero)
1.06
julia> x.prec = 10
10
julia> x
1.0625
或
julia> Base.MPFR._string(x, 10)
"1.0625"
现在打印1.06
的原因是Julia对输出进行了四舍五入(在这种情况下,这是MPFR外部库的默认四舍五入)。