julia - 使用 UInt128 数据类型时 Julia 中的大整数除法错误

标签 julia integer-division

当我除以 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

最佳答案

Julia 中的整数除法提升为 Float64。您想使用 div÷ 进行整数除法。

对于这个非常简短的版本,3/2 = 1.5

关于julia - 使用 UInt128 数据类型时 Julia 中的大整数除法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69003542/

相关文章:

Julia 电源运算符(operator)未按预期工作

julia - 我是否需要在 if x == Nothing 的怀抱中键入断言

algorithm - 非恢复有符号整数除法后校正

linux - Linux 中的 do_div() 是否适用于 32 位和 64 位架构?

java - 整数除法 : How do you produce a double?

python - Emacs 终端列宽(julia/python shell)

multithreading - Julia 中线性回归的并行/多线程版本

julia - 在 Julia 中查找子字符串的索引

math - 使用位移位除以 10?

c++ - 对于 C++ 整数,1 除以 2 是否确实等于 0,以及 3/2 = 1、5/2 = 2 等?