当我运行程序时,会发生错误:
program lab_1_27;
uses crt;
var
x, y, z: real;
a: integer;
function pow_udf(m, n:real) : real;
var
result: real;
begin
result:= exp(y * ln(x));
end;
begin
clrscr;
readln(x);
readln(y);
z:= pow_udf(x, y);
a:= round(z); (* a cursor is in this line after terminating the program *)
writeln(a);
readkey;
end.
错误:
Error 207: invalid floating point operation.
请告诉我这种行为的原因是什么,因为我不能资助它......
答案 0 :(得分:1)
function pow_udf(m, n:real) : real;
var
result: real;
begin
result:= exp(y * ln(x));
end;
上面的代码将计算分配给名为result
的局部变量,但无法从函数返回任何结果。此外,它正在处理全局变量x
和y
,而不是传递给函数的变量。替换为:
function pow_udf(m, n:real) : real;
begin
pow_udf:= exp(n * ln(m));
end;
答案 1 :(得分:1)
老问题,但我在程序中遇到同样的错误,我的解决方案不同;可能会帮助其他人搜索此错误代码。
对于我的程序,我使用了编译器指令N,并且通过将其切换到N +,我看到了相当大的速度增加,但随后错误207开始弹出。
在源代码顶部添加指令N-,例如
{$N-}
PROGRAM ExampleProg;
USES Crt, Dos;
或进入编译器选项并禁用8087/80287处理。这可以解决您的问题。
注意:如果您的源代码中定义了编译器指令N +,那么更改IDE中的选项就不会做任何事情;源代码否决了!