将FDLIBM库集成到iOS

时间:2016-02-24 19:45:14

标签: ios c swift llvm-clang math.h

我正在尝试将FDLIBM库(http://www.netlib.org/fdlibm/)集成到我的基于Swift(也有一些objc和c代码)的iOS应用程序中。但是,某些功能与自动包含在iOS中的math.h存在冲突,即sincosacosasin,{{1}等等,所以项目不编译。我确实需要在FDLIBM中使用这些功能。

这些是fdlibm.h(http://www.netlib.org/fdlibm/fdlibm.h)中定义的一些与pow重复的函数

math.h

有人有解决方案吗?任何建议和提示将不胜感激。感谢。

更新 为了更好地了解我正在做的事情,我们正在使用相同的后端服务构建一个跨平台的应用程序(现在是Android和iOS)。我们需要进行关键的浮点计算,以确保两侧的结果相同。根据我们的测试,Android上/* * ANSI/POSIX */ extern double acos __P((double)); extern double asin __P((double)); extern double atan __P((double)); extern double atan2 __P((double, double)); extern double cos __P((double)); extern double sin __P((double)); extern double tan __P((double)); extern double cosh __P((double)); extern double sinh __P((double)); extern double tanh __P((double)); extern double exp __P((double)); extern double frexp __P((double, int *)); extern double ldexp __P((double, int)); extern double log __P((double)); extern double log10 __P((double)); extern double modf __P((double, double *)); extern double pow __P((double, double)); extern double sqrt __P((double)); sin()cos()和其他一些功能的结果与iOS中fdlimb中使用相同功能的结果不同。因此,我尝试将math.h集成到iOS中,看看我们是否可以获得相同的结果。

因此,如果有办法解决根问题,这使得iOS和Android的浮点计算与这些函数完全相同fdlibmpow()sin(),{ {1}},cos()asin(),我不必整合acos()

2 个答案:

答案 0 :(得分:1)

以防万一将来对其他人有帮助:我们最终重命名所有冲突的函数并解决任何重复的声明。虽然有很多警告,但它现在运作得很好。后来的计划是将其包装成动态框架来消费。也许以后我们甚至可以开源吧。

答案 1 :(得分:0)

从评论看起来有很多工作,考虑一个解决方法,例如在服务器端围绕所有浮点,以便最后一个数字将被删除。
Sun(Java)曾在两个平台之间检测到最后一位数字的差异,并决定计算所有软件数学。他们称之为StrictMath。