在项目中要使用到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);}
www说
相关分类