Pascal 帕斯卡序数错误

Pascal 帕斯卡序数错误,pascal,freepascal,ordinal,Pascal,Freepascal,Ordinal,我需要运行一个循环100亿次,但未能运行,请帮助我完成这项工作。我犯了顺序错误 program kittu; var i:qword; j:qword; k:qword; begin i:= 10000000000; k:= 0; for j:=1 to i do begin k:=k+1; end; writeln(k); readln(); end. 从F

我需要运行一个循环100亿次,但未能运行,请帮助我完成这项工作。我犯了顺序错误

program kittu;
    var i:qword;
        j:qword;
        k:qword;
begin
    i:= 10000000000;
    k:= 0;
    for j:=1 to i do
        begin
            k:=k+1;
        end;
    writeln(k);
    readln();
end.

从FreePascal文档中获取此错误消息

错误:应为序号表达式表达式表达式必须为序号 类型,即最大长度。例如,当您 为Inc或Dec指定第二个参数,该参数的计算结果不为 序数值


变量K定义为qword,长度为64位。LongInt是32位。

for语句的
依赖于平台

观察:在32位平台上,不支持将qword用作计数器变量

但似乎没有文档支持来说明支持哪一组数据类型用作计数器变量。

已在32位和64位平台上试用:

32位:
变量
j
的声明可以更改为数据类型
dword
,以使其成功编译。
还需要使用
release
模式进行编译,以防止由于溢出而导致错误。

编译器:i386的Win32免费Pascal IDE
目标CPU:i386
版本1.0.12 2017/02/13
编译器版本:3.0.2
环境:Win10

编辑:
使用x86_64交叉编译器成功地使用i386免费pascal编译 在64位Win10上(edit2:在左侧的命令行中)

Guess:可以使用寄存器优化
for
语句中的计数器。在i386配置下,qword对于32位寄存器来说太大。

64位:

但它似乎在64位平台上运行良好。

编译器:适用于x86_64的免费Pascal编译器版本3.0.2[2017/03/18]
环境:“无法运行”是什么意思?我们看不到您的计算机。它说jAnd Longints(32位)上j:=1的顺序表达式不能达到100亿。他们的上限约为20亿。所以他必须嵌套循环。您的第一个图像显示它没有成功编译。第一个图像显示它在命令行中编译,左侧是ppcrossx64。明白了。我没有注意背景。你的发现很有趣。