在项目中要使用到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
2 回答
www说
TA贡献1775条经验 获得超8个赞
泰勒级数展开,学过微积分应该都知道。如果条件比较宽的话,基本上是万能的。由于泰勒展开在离原点比较远的地方可能不准,可以试试只要实现1~10就可以了,别的数先用1~10算再加个整数。
添加回答
举报
0/150
提交
取消