Delphi如何直接取浮点数的幂

wooden954 2010-01-18 04:56:27
一个浮点数变量Val,如何通过Delphi的函数(注意是Delphi的函数而不是自定义的函数)直接取它的幂值?

比如当Val:=101.3时,它的科学表达式形式为“1.013E+2”,我想得到它的幂值“2”
当Val:=0.0103时,它的科学表达式形式为“1.013E-2”,我想得到的值是“-2”
...全文
156 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wooden954 2010-01-19
  • 打赏
  • 举报
回复
没有人有其它思路了??
wooden954 2010-01-19
  • 打赏
  • 举报
回复
4楼所贴是Log10函数的实现,只有4句汇编,速度应该是非常快的。
wooden954 2010-01-19
  • 打赏
  • 举报
回复
看来应该是Log10函数最快了,结贴给分!
yyyyyhhhhwwww 2010-01-19
  • 打赏
  • 举报
回复
2楼正解,顶
  • 打赏
  • 举报
回复
x86的浮点遵循IEEE754标准,但是有单精度、双精度、扩展精度的差别,另外Delphi中还有real48自定义格式,你自己分析不会快的。
wooden954 2010-01-18
  • 打赏
  • 举报
回复
不知道Delphi的浮点数在不同型号的CPU(但仅限于X86或X64系列机)上是否采用的同一种格式,如果是的话,我倒是想直接分析浮点数的阶码得到幂。
npkaida 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 supertitan001 的回复:]
edit1.Text:=inttostr(round(log10(strtofloat(edit1.Text))));
[/Quote]
2 楼正解
round(log10(101.3)) ---> 2
round(log10(0.0103)) ---> -2
亮剑_ 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 supertitan001 的回复:]
edit1.Text:=inttostr(round(log10(strtofloat(edit1.Text))));
[/Quote]
原来有函数


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;
亮剑_ 2010-01-18
  • 打赏
  • 举报
回复
1、用mod,以1为分界值
2、利用FormatFloat,再提取幂值
SuperTitan001 2010-01-18
  • 打赏
  • 举报
回复
edit1.Text:=inttostr(round(log10(strtofloat(edit1.Text))));
wooden954 2010-01-18
  • 打赏
  • 举报
回复
查了一下关于Math的单元函数,貌似没有直接支持的函数
不知道其它单元有没有。

如果实在没有,我会把分给算法效率最高的一位。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧