Pascal 帕斯卡序数错误
我需要运行一个循环100亿次,但未能运行,请帮助我完成这项工作。我犯了顺序错误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
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。明白了。我没有注意背景。你的发现很有趣。