执行64位算术的正确方法是什么?

时间:2018-03-28 22:31:39

标签: agda

我找到了64位浮点和32位有符号整数运算的基元。我没有找到64位无符号整数运算的原语。没有这些,在Agda上处理64位uint算法的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

似乎是present on 2.5.4。 (正好比我使用的版本高一个版本。)

  

添加了对内置64位机器字的支持。

     

这些在Agda.Builtin.Word中定义,并带有两个基本操作来转换为自然数和从自然数转换。

Word64 : Set
primWord64ToNat   : Word64 → Nat
primWord64FromNat : Nat → Word64
     

转换为自然数是一个简单的嵌入,从自然数转换为你提供模2 ^ 64的余数。这些定理的证明不是原始的,但可以使用primTrustMe在库中定义。

     

可以通过转换为自然数,执行相应的操作,然后转换回来在Word64上定义基本算术运算。编译器将优化这些以使用64位算术。例如,

addWord : Word64 → Word64 → Word64
addWord a b = primWord64FromNat (primWord64ToNat a + primWord64ToNat b)

subWord : Word64 → Word64 → Word64
subWord a b = primWord64FromNat (primWord64ToNat a + 18446744073709551616 - primWord64ToNat b)
     

这些编译(在GHC后端)到Data.Word.Word64上的加法和减法