【问题标题】:Calculations with QWord in freepascal在 freepascal 中使用 QWord 进行计算
【发布时间】:2015-05-20 08:54:30
【问题描述】:

我必须不时处理我的应用程序中的大量数字。所以我决定使用 QWord 来确保该范围将(希望)涵盖所有场景。 长话短说,FreePascal 编译器似乎在整数范围内进行所有数学运算。这会导致一些奇怪的行为,即

if QWordVariable > 8600000000 then ...

即使 QWordVariable 大于 8600000000 也不会进入 then 部分。只有显式类型的对话才能让 if 子句正常工作:

if QWordVariable > QWord(8600000000) then ...

有人知道为什么编译器不会自动将静态数字转换为 QWord 进行比较吗?

非常感谢您的提前和亲切的问候,

LT

【问题讨论】:

    标签: int range overflow freepascal int64


    【解决方案1】:

    最高精度的无符号类型是特殊的,因为 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 直到你真的需要那个额外的位。

    【讨论】:

    • 非常感谢!看来我实际上确实需要无符号数据类型(即使我的示例没有显示它)。所以我必须注意这种特殊情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    相关资源
    最近更新 更多