在delphi中,好像没有log()函数,我就化为:ln()/ln10;但下面三个式子,分析结果应该相同,但计算出来差别很大,不知为啥?
t1:=(4*ln(4)+6*ln(6))/ln(10);
t2:=4*ln(4)/ln(10)+6*ln(6)/ln(10);
t3:=4*(ln(4)/ln(10))+6*(ln(6)/ln(10));算出结果:
t1: 2.7445778241e-16
t2: 7.2112850511e-17
t3: 3.9331618652e-18考虑到可能是因为double和整形的区别,修改如下:
t11,t12,t13:double;
d1:=4.0;
d2:=6.0;
d3:=10.0;t11:=(d1*ln(d1)+d2*ln(d2))/ln(d3);
t12:=d1*ln(d1)/ln(d3)+d2*ln(d2)/ln(d3);
t13:=d1*(ln(d1)/ln(d3))+d2*(ln(d2)/ln(d3));
结果为:
t11: 1.1852220635e-15
t12: 3.8457897943e-07
t13: 3.8457897804e-07上面的数字只是试试看哪种方式结果更可靠,但现在我还是不知道在编程中用哪种形式?
请教高手!

解决方案 »

  1.   

    你该查看pascal中div和/的区别,看有没进展
      

  2.   

    div是整除,应该不是!/是整数或实数相除!
      

  3.   

    不会吧,我算出来的都是7.07714746761371
    procedure TForm1.Button1Click(Sender: TObject);
    var
      d1, d2, d3: double;
    begin
      d1 := 4;
      d2 := 6;
      d3 := 10;
      Edit4.Text :=FloatToStr((d1*ln(d1)+d2*ln(d2))/ln(d3));
      Edit5.Text :=FloatToStr(d1*ln(d1)/ln(d3)+d2*ln(d2)/ln(d3));
      Edit6.Text :=FloatToStr(d1*(ln(d1)/ln(d3))+d2*(ln(d2)/ln(d3)));
    end;
      

  4.   

    math单元有个函数
    function LogN(const Base, X: Extended): Extended;这个应该是你找的吧
    t13:=d1*logN(d3,d1)+d2*logN(d3,d2);
      

  5.   

    math单元有个函数
    function LogN(const Base, X: Extended): Extended;
    这样计算
    edit3.text:=FloatToStr(4*logN(10,4)+6*logN(10,6));
    得到的结果是:
    7.07714746761371
    另外
    浮点数存在误差!,这是cpu的问题,^_^
      

  6.   

    Calculates log base N.UnitMathCategoryArithmetic routinesfunction LogN(N, X: Extended): Extended;DescriptionLogN returns the log base N of X.