使用UInt128数据类型进行大整数除法时,在Julia中出现错误。

3
当我使用UInt128类型的大整数进行除法运算时,结果不正确。该错误似乎发生在与float64舍入其结果相同的位置,即在有效数字方面。使用一些简单的操作,例如除以2,我可以轻松验证我没有得到正确的答案。同时,我可以使用BigInt类型来验证在使用UInt128变量时是否确实出现了显著数字误差。
我对Julia还不是很熟悉,不熟悉语言内部工作原理,无法知道为什么会发生这种情况,以及何时应该预期这些结果。请问有人能够给我一些关于为什么/如何发生这种情况的见解吗?
例如:
xb::BigInt = big"40282366920938463463374607431768211456"
ub::BigInt = big"2"

xu::UInt128 = parse(UInt128,"40282366920938463463374607431768211456")
uu::UInt128 = parse(UInt128, "2")

println("Initial value for xb = " , xb)    
println("Initial value for xu = " , xu)   

gb::BigInt = xb / ub
gu::UInt128 = xu / uu
g1::UInt128 = UInt128(40282366920938463463374607431768211456) / UInt128(2)
g2 = UInt128(40282366920938463463374607431768211456) / UInt128(2)
println("Division result using BigInt            = ", gb)
println("Division result using UInt128 variables = ", gu)
println("Division result using UInt128 typecasts = ", g1)
println("Division result using UInt128 julia decides = ", g2)
println(typeof(g2)) 

输出:

julia> include("uint128_test.jl")
Initial value for xb = 40282366920938463463374607431768211456
Initial value for xu = 40282366920938463463374607431768211456
Division result using BigInt            = 20141183460469231731687303715884105728
Division result using UInt128 variables = 20141183460469232747289327097010454528
Division result using UInt128 typecasts = 20141183460469232747289327097010454528
Division result using UInt128 julia decides = 2.0141183460469233e37
Float64
1个回答

4

Julia中的整数除法会升级为Float64。如果要进行整数除法,应使用div÷

简短版本:3/2 = 1.5


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接