是否有一个 GNU C 编译器选项可以生成运行速度更快但精度低于默认设置的浮点程序
Is there a GNU C compiler option that generate floating point programs that run faster but less precise than the default setting?
我一直在寻找GNU C的选项,以便我的浮点程序可以生成比默认GNU设置生成的代码运行得更快(尽管精度较低)的代码。
假设我有一个程序my_fp_prog.c
double sqrt_two(return sqrt(2));
虽然确切的答案应该是1.414....,但我只需要答案1.4甚至1.5或1.3对我来说都可以,但我需要一个更快的程序。当然,我们的情况是使用更便宜的sqrt算法,但我正在寻找的是完成这项工作的编译器选项。希望存在这样的选择。
来自 GCC 的手册页:
-ffast-math
设置
-fno-math-errno
、-funsafe-math-optimizations
、-ffinite-math-only
、-fno-rounding-math
、-fno-signaling-nans
和-fcx-limited-range
。此选项会导致定义预处理器宏
__FAST_MATH__
。除
-Ofast
之外,任何-O
选项都不会打开此选项,因为它可能导致依赖于数学函数的 IEEE 或 ISO 规则/规范的精确实现的程序输出不正确。但是,它可能会为不需要这些规范保证的程序生成更快的代码。
相关文章:
- 如何仅使用一次固定<<设置精度(2)?或者至少恢复到默认行为?
- 保证最大输出长度为双精度,并设置默认输出格式的精度
- 如何以精度换取速度来评估C++中两个向量的点积符号?(不特定于硬件)
- C# 是否有办法将双精度数组强制转换为类似于C++转换为 char* 的字符串?
- 如何使用户定义的空默认构造函数的行为类似于编译器定义的空构造函数
- C++ - 泛型结构的成员在分配双精度时给出错误的值(但适用于整数)
- 可变参数构造函数优先于用户提供的移动构造函数,除非默认
- 为什么默认参数不能依赖于非默认参数?
- 设置精度应用于旧的 C 样式代码
- 以 C++ 为单位设置默认浮点打印精度
- std::vector 适用于非默认可构造的类
- 默认情况下全局变量是 extern 还是等效于在全局中使用 extern 声明变量
- 如何设置依赖于其他参数的参数默认值
- 为什么构造函数调用依赖于默认析构函数的存在?
- 是否有一个 GNU C 编译器选项可以生成运行速度更快但精度低于默认设置的浮点程序
- GCC 为依赖于默认构造函数的模板化类中的静态数据成员提供"undefined reference"错误
- 在x64平台上的GCC中,默认情况下为扩展精度
- 带有自定义散列函数(bstrt)的无序映射仅适用于默认构造函数(重复键)
- 为什么 cout 的默认精度不会影响评估结果?
- C++中的函数重载.不适用于浮点,适用于双精度