在 freepascal 中使用 QWord 进行计算
Calculations with QWord in freepascal
我有时不得不在我的应用程序中处理大量数字。所以我决定使用 QWord 来确保范围将(希望)涵盖所有场景。
长话短说,似乎 FreePascal 编译器在整数范围内进行所有数学运算。这会导致一些奇怪的行为,即
if QWordVariable > 8600000000 then ...
即使 QWordVariable 大于 8600000000,也不进入 then 部分。只有显式类型对话才能使 if 子句正常工作:
if QWordVariable > QWord(8600000000) then ...
有人知道为什么编译器不自动将静态数字转换为 QWord 进行比较吗?
非常感谢您和亲切的问候,
LT
最高精度的无符号类型是特殊的,因为Pascal以有符号为基本类型,并以最高公共基本(有符号)类型进行计算。文字也默认为这种类型。
由于最高类型是int64,所以它使带有qword和文字的表达式范围大于64位。 (-2 ^-n .. -2^(n+1)-1 且 n=63)
另见 Why do Delphi and Free Pascal usually prefer a signed-integer data type to unsigned one?
我会简单地使用 int64 直到你真的需要那个额外的位。
我有时不得不在我的应用程序中处理大量数字。所以我决定使用 QWord 来确保范围将(希望)涵盖所有场景。 长话短说,似乎 FreePascal 编译器在整数范围内进行所有数学运算。这会导致一些奇怪的行为,即
if QWordVariable > 8600000000 then ...
即使 QWordVariable 大于 8600000000,也不进入 then 部分。只有显式类型对话才能使 if 子句正常工作:
if QWordVariable > QWord(8600000000) then ...
有人知道为什么编译器不自动将静态数字转换为 QWord 进行比较吗?
非常感谢您和亲切的问候,
LT
最高精度的无符号类型是特殊的,因为Pascal以有符号为基本类型,并以最高公共基本(有符号)类型进行计算。文字也默认为这种类型。
由于最高类型是int64,所以它使带有qword和文字的表达式范围大于64位。 (-2 ^-n .. -2^(n+1)-1 且 n=63)
另见 Why do Delphi and Free Pascal usually prefer a signed-integer data type to unsigned one?
我会简单地使用 int64 直到你真的需要那个额外的位。