有什么方法可以用除法编写C代码,以命令编译器在代码中需要规则除法精度的几个特定位置不使用快速除法(通过倒数),即使全局允许倒数也是如此?
理想情况下,存在一种方法,该方法不是特定于编译器的,并且也可以在例如快速运算和不安全运算的选项中保留下来gcc。
答案 0 :(得分:0)
您可以在单独的文件中提供自己的除法功能,例如divide.c
double divide(double a, double b) { return a/b; }
写入相应的头文件divide.h
double divide(double a, double b);
然后输入您的代码
#include "divide.h"
int foo() {
//...
double x = divide(y,3.0);
}
由于此处的编译器不知道函数除法,因此无法对其进行优化。因此,应用了全除法算法。
答案 1 :(得分:0)
您可以使用优化#pragma禁用特定代码中的-ffast-math(或反转它)。
在使用库函数时要小心,它们可能是在设置了 FAST_MATH 的情况下导入的,因此即使在禁用了本地快速数学的代码中,它们也可能会使用快速数学版本。