在Delphi中使用Power时出错

时间:2014-06-17 00:33:13

标签: delphi

我的程序中有以下功能,它给了我一个EInvalidOp(无效浮点运算):

function TMyProgram.GetVal(A, B, C, D, E: double): double;

begin

  Result := A/Power((C - D)/(D - B), 1/E);

end;

参数的值为:

答:320.068, B:84.46, C:91.632, D:24.15, E:11

Excel给出了-316.815的结果,但Delphi在执行此函数时给出了一个错误。

2 个答案:

答案 0 :(得分:1)

我做了一些研究。问题在于给分数指数增加负基数。在您的特定情况下,您可以使用数学身份来解决它:

function TMyProgram.GetVal(A, B, C, D: Double; E: Integer): double;
begin
  if Odd(E) and ((C - D)/(D - B) < 0) then
    Result := A/-Power(Abs((C - D)/(D - B)), 1/E)
  else
    Result := A/Power((C - D)/(D - B), 1/E);
end;

仅当E为奇数时才有效。

答案 1 :(得分:-1)

-316.81520613

这就是Jack Lyle所提供的power2功能。

在这里查看完整代码power2

{**来自Jack Lyle的强大功能。据说比比较强大     Delphi附带的Pow功能。 }

function Power2(Base, Exponent : Double) : Double;
{ raises the base to the exponent }
  CONST
    cTiny = 1e-15;

  VAR
    Power : Double; { Value before sign correction }

  BEGIN
    Power := 0;
    { Deal with the near zero special cases }
    IF (Abs(Base) < cTiny) THEN BEGIN
      Base := 0.0;
    END; { IF }
    ... // see the link to full code

  END; { FUNCTION Pow }