我正在尝试将FDLIBM库(http://www.netlib.org/fdlibm/)集成到我的基于Swift(也有一些objc和c代码)的iOS应用程序中。但是,某些功能与自动包含在iOS中的math.h
存在冲突,即sin
,cos
,acos
,asin
,{{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的浮点计算与这些函数完全相同fdlibm
,pow()
,sin()
,{ {1}},cos()
,asin()
,我不必整合acos()
答案 0 :(得分:1)
以防万一将来对其他人有帮助:我们最终重命名所有冲突的函数并解决任何重复的声明。虽然有很多警告,但它现在运作得很好。后来的计划是将其包装成动态框架来消费。也许以后我们甚至可以开源吧。
答案 1 :(得分:0)
从评论看起来有很多工作,考虑一个解决方法,例如在服务器端围绕所有浮点,以便最后一个数字将被删除。
Sun(Java)曾在两个平台之间检测到最后一位数字的差异,并决定计算所有软件数学。他们称之为StrictMath。