将 FDLIBM 库集成到 iOS
Integrate FDLIBM library to iOS
我正在尝试将 FDLIBM 库 (http://www.netlib.org/fdlibm/) 集成到我的基于 Swift 的应用程序中(也有一些 objc 和 c 代码)iOS 应用程序。但是,其中一些功能与自动包含在 iOS 中的 math.h
有冲突,即 sin
、cos
、acos
、asin
、 pow
,等。所以项目不编译。我确实需要在 FDLIBM 中使用这些功能。
这些是 fdlibm.h (http://www.netlib.org/fdlibm/fdlibm.h) 中定义的一些函数,它们与 math.h
重复
/*
* 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));
有人对此有解决方案吗?任何建议和提示将不胜感激。谢谢。
更新:
为了提供更多关于我正在做的事情的背景信息,我们正在构建一个跨平台应用程序(目前为 Android 和 iOS),使用相同的后端服务。我们需要进行关键的浮点计算,以确保双方的结果相同。根据我们的测试,sin()
、cos()
和 fdlimb
中的一些其他函数在 Android 上的结果与在 math.h
中使用相同函数的结果不同在 iOS。所以我试图将 fdlibm
整合到 iOS 中,看看我们是否可以获得相同的结果。
所以如果有办法解决根本问题,使得iOS和Android这些函数的浮点计算完全一样 pow()
,sin()
, cos()
, asin()
, acos()
, atan2()
, 我不用整合 fdlibm.h
从评论来看,这看起来工作量很大,请考虑变通,例如在服务器端舍入所有浮点数,以便删除最后一位数字。
Sun (Java) 曾经检测到两个平台之间最后一位数字的差异,并决定在软件中计算所有数学。他们称之为 StrictMath。
以防万一这对将来的其他人有帮助:我们最终重命名了所有冲突的函数并解决了所有重复的声明。现在它工作得很好,尽管有很多警告。后来的计划是把它包装成一个动态框架来消费。也许以后我们甚至可以开源它。
我正在尝试将 FDLIBM 库 (http://www.netlib.org/fdlibm/) 集成到我的基于 Swift 的应用程序中(也有一些 objc 和 c 代码)iOS 应用程序。但是,其中一些功能与自动包含在 iOS 中的 math.h
有冲突,即 sin
、cos
、acos
、asin
、 pow
,等。所以项目不编译。我确实需要在 FDLIBM 中使用这些功能。
这些是 fdlibm.h (http://www.netlib.org/fdlibm/fdlibm.h) 中定义的一些函数,它们与 math.h
/*
* 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));
有人对此有解决方案吗?任何建议和提示将不胜感激。谢谢。
更新:
为了提供更多关于我正在做的事情的背景信息,我们正在构建一个跨平台应用程序(目前为 Android 和 iOS),使用相同的后端服务。我们需要进行关键的浮点计算,以确保双方的结果相同。根据我们的测试,sin()
、cos()
和 fdlimb
中的一些其他函数在 Android 上的结果与在 math.h
中使用相同函数的结果不同在 iOS。所以我试图将 fdlibm
整合到 iOS 中,看看我们是否可以获得相同的结果。
所以如果有办法解决根本问题,使得iOS和Android这些函数的浮点计算完全一样 pow()
,sin()
, cos()
, asin()
, acos()
, atan2()
, 我不用整合 fdlibm.h
从评论来看,这看起来工作量很大,请考虑变通,例如在服务器端舍入所有浮点数,以便删除最后一位数字。
Sun (Java) 曾经检测到两个平台之间最后一位数字的差异,并决定在软件中计算所有数学。他们称之为 StrictMath。
以防万一这对将来的其他人有帮助:我们最终重命名了所有冲突的函数并解决了所有重复的声明。现在它工作得很好,尽管有很多警告。后来的计划是把它包装成一个动态框架来消费。也许以后我们甚至可以开源它。