VB6 Mod 函数给出不正确的负值

VB6 Mod function gives incorrect values with negative values

我在 vb6 脚本中有一个失败的步骤。代码如下

output = ((azmnum + steps ) mod 16777216)

函数中变量的值是

-850344 = (5184326 + -6034670) mod 16777216)

所有变量都是长数字。我将这些值输入到所有其他程序中(python 和 excel)return 15926872。我不明白为什么模数被忽略了。

mod 在所有语言中并不相同,尤其是对于负数。 VB6(以及一大堆其他编译器,如 C、C++、C#、Java)采用 Fortran 解释,即除法后的余数。从数学上讲,如果数字是负数,这是错误的解释。你拥有的是

5184326 + -6034670 = -850344
-850344 mod 16777216 = -850344 

Python 和 excel 对 modulo 进行正确解释,其中结果始终为正。这需要一个额外的步骤,即

-850344 + 16777216 = 15926872