发生错误207没有原因(无效的浮点操作。)

时间:2013-09-12 17:34:17

标签: floating-point runtime-error pascal

当我运行程序时,会发生错误:

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.

请告诉我这种行为的原因是什么,因为我不能资助它......

2 个答案:

答案 0 :(得分:1)

function pow_udf(m, n:real) : real;
var
  result: real;
begin
  result:= exp(y * ln(x));
end;

上面的代码将计算分配给名为result的局部变量,但无法从函数返回任何结果。此外,它正在处理全局变量xy,而不是传递给函数的变量。替换为:

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中的选项就不会做任何事情;源代码否决了!