猿问

log10使用什么算法实现?

在项目中要使用到log10计算,可所用系统的标准库里并没有移植该功能,需要自己实现。请问,采用什么算法实现该功能?
在网上找了一个例子,但不确定能否在嵌入式的一些平台使用。
doublemy_log10(doublex)
{
registerdoubleret;
__asm__(
"fldlg2\n\t"
"fxch\n\t"
"fyl2x"
:"=t"(ret)
:"0"(x)
);
returnret;
}
也查看了glibc的源码,可调用了其它的一些API,对库的依赖比较大,逐步移植的话比较麻烦。代码如下:
double__log10(doublex)
{
if(__builtin_expect(islessequal(x,0.0),0)&&_LIB_VERSION!=_IEEE_)
{
if(x==0.0)
{
feraiseexcept(FE_DIVBYZERO);
return__kernel_standard(x,x,18);/*log10(0)*/
}
else
{
feraiseexcept(FE_INVALID);
return__kernel_standard(x,x,19);/*log10(x<0)*/
}
}
return__ieee754_log10(x);
}
holdtom
浏览 722回答 2
2回答

www说

泰勒级数展开,学过微积分应该都知道。如果条件比较宽的话,基本上是万能的。由于泰勒展开在离原点比较远的地方可能不准,可以试试只要实现1~10就可以了,别的数先用1~10算再加个整数。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答