Platform independent math library

纵饮孤独 提交于 2019-12-06 06:20:49

问题


Is there a publically available library that will produce the exact same results for sin, cos, floor, ceil, exp and log on 32 bit and 64 bit linux, solaris and possibly other platforms?

I am considering the following alternatives:
a) cephes compiled with gcc -mfpmath=sse and the same optimization levels on each platform ... but its not clear that this would work.
b) MPFR but I am worried that this would be too slow.

Regarding precision (edited): For this particular application I don't really need something that produces the value that is numerically closest to the exact value. I just need the answers to be the exact same on all platforms, os and "bitness". That being said the values need to be reasonable (5 digits would probably be enough). I apologize for not having made this clear in my initial question.

I guess MAPM or MPFR with a low enough precision setting might do the trick but I was hoping to find something that did not have the "multiple precision" machinery/flavor to it. In any case, I will try this out.


回答1:


Would something like: http://lipforge.ens-lyon.fr/www/crlibm/index.html be what you are searching for (this is a library whose aim is to be able to replace the standard math library of C99 -- so keep good enough performance in the normal cases -- while ensuring correctly rounded result according to IEEE 754 rounding modes) ?




回答2:


crlibm is the correct tool for this. An earlier poster linked to it. Because it is correctly rounded, it will deliver bit-identical results on all platforms with IEEE-754 compliant hardware if compiled properly. It is much, much faster than MPFR.




回答3:


You shouldn't need one. floor and ceil will be exact since their computation is straightforward.

What you are concerned with is rounding on the last bit for the transendentals like sin, cos, and exp. But these are native to the CPU microcode and can be done in high quality consistently regardless of library. However, the rounding does vary from chip architecture to architecture.

So, if exact answers for the transindentals is indeed your goal, you do need a portable library, and you also will be giving up huge efficiencies by doing so. You could use a portable library like MAPM which gives you not only consistent ULP results but as a side benefit lets you define arbirary precision.

You can check your math precision with tools like this one and this one.




回答4:


You mention using SSE. If you're planning on only running on x86 chips, then what exactly are the inconsistencies you're expecting?

As for MPFR, don't worry - test it! By the way, if it's good enough to be included in GCC, it's probably good enough for you.




回答5:


You want to use MPFR. That library has been around for years and has been ported to every platform under the sun and optimized by tons of people.

If MPFR isn't sufficient for your needs we're talking about full custom ASM implementations in which case it might be more efficient to consider implementing it in dedicated hardware.



来源:https://stackoverflow.com/questions/1129032/platform-independent-math-library

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!