You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia使用UInt128数据类型时大整数除法错误问题咨询

Julia UInt128整数除法结果错误的原因说明

核心原理

该问题本质是运算符使用错误,和UInt128本身的运算精度无关:

  • Julia中/运算符对所有整数输入的默认返回类型为浮点数,而非整数。你测试的数值远超过Float64的精确整数表示范围(仅支持≤2^53的整数无精度丢失,约对应16位十进制有效数字),运算时会先将UInt128值转换为Float64,这一步已经出现了精度舍入,后续你再将结果转回UInt128,自然会得到误差值,和你观测到的“误差位置和Float64舍入位置一致”的现象完全匹配。
  • 你输出的g2类型为Float64也直接印证了该逻辑:UInt128 / UInt128的原生返回值就是Float64,手动标注返回类型为UInt128只是强制对已经丢失精度的浮点数做了类型转换,并不会修正前置的精度损失。

正确整数除法用法

执行整数除法请使用div()函数或者÷运算符(输入\div后按Tab即可打出),这两个运算会直接在整数类型上完成计算,不会转换为浮点数,不存在精度丢失问题。
修正后运算示例:

xu::UInt128 = parse(UInt128,"40282366920938463463374607431768211456")
uu::UInt128 = 2
# 整数除法写法1
gu1 = div(xu, uu)
# 整数除法写法2
gu2 = xu ÷ uu
println(gu1) 
# 输出和BigInt运算一致的正确结果:20141183460469231731687303715884105728

问题触发场景

只要同时满足以下两个条件就会出现该类精度误差:

  • 参与/运算的整数值大于2^53,超出Float64的精确整数表示范围
  • 将/返回的浮点数结果强制转换回整数类型使用

内容的提问来源于stack exchange,提问作者Stephen Miller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:12:01