一个浮点数变量Val,如何通过Delphi的函数(注意是Delphi的函数而不是自定义的函数)直接取它的幂值?比如当Val:=101.3时,它的科学表达式形式为“1.013E+2”,我想得到它的幂值“2”
当Val:=0.0103时,它的科学表达式形式为“1.013E-2”,我想得到的值是“-2”

解决方案 »

  1.   

    查了一下关于Math的单元函数,貌似没有直接支持的函数
    不知道其它单元有没有。如果实在没有,我会把分给算法效率最高的一位。
      

  2.   

    edit1.Text:=inttostr(round(log10(strtofloat(edit1.Text))));
      

  3.   

    1、用mod,以1为分界值
    2、利用FormatFloat,再提取幂值
      

  4.   

    原来有函数
    function Log10(const X: Extended): Extended;
      { Log.10(X) := Log.2(X) * Log.10(2) }
    asm
            FLDLG2     { Log base ten of 2 }
            FLD     X
            FYL2X
            FWAIT
    end;
      

  5.   

    2 楼正解
    round(log10(101.3)) ---> 2
    round(log10(0.0103)) ---> -2
      

  6.   

    不知道Delphi的浮点数在不同型号的CPU(但仅限于X86或X64系列机)上是否采用的同一种格式,如果是的话,我倒是想直接分析浮点数的阶码得到幂。
      

  7.   

    x86的浮点遵循IEEE754标准,但是有单精度、双精度、扩展精度的差别,另外Delphi中还有real48自定义格式,你自己分析不会快的。
      

  8.   

    看来应该是Log10函数最快了,结贴给分!
      

  9.   

    4楼所贴是Log10函数的实现,只有4句汇编,速度应该是非常快的。