- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的代码主要处理单精度 float 。对超越函数的调用相当频繁。现在,我正在使用 sin()、cos()、sqrt() 等——接受并返回 double
的函数。当它仅为 x87 编译时,我知道单精度和 double 之间没有区别。我在 Agner Fog 的优化指南中读到,使用 SSE 指令的这些函数的软件版本对于单精度 float 更快。
我的问题是编译器在遇到类似这样的情况时是否会自动使用更快的函数:
float x = 1.23;
float y = sin(x);
或者舍入规则是否排除了这种优化?
只需执行搜索和替换并查看是否有任何性能提升就足够容易了。麻烦的是我还需要指向这些函数的指针。在 MSVC 中,sinf()、cosf() 和 friends 是内联函数。因此,使用它们需要一些体操。在做出努力之前,我想知道这是否值得。
除了 MSVC,我还针对 gcc。
最佳答案
调用sin
时真的不需要强制转换.事实上,如果你使用 <tgmath.h>
会适得其反。 C99 附带的 header 。这为您提供了类型的通用宏,这些宏将根据您的参数选择正确的函数,不幸的是,不是针对目标类型。因此,如果您使用该 header (不确定这是否适用于 MS)
float x = 1.23;
float y = sin(x);
会自动使用sinf
在幕后。
关于c - sinf()、cosf() 和 sin()、cos() 之间的任何性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16178932/
今天早上突然开始。 原文是这样的 float angle = (x+90)*(M_PI/180.0); float xx = cosf(angle); float yy = sinf(angle);
这个问题在这里已经有了答案: std::expf and std::logf not recognized by gcc 7.2.0 (3 个回答) 关闭3年前。 根据这里的讨论,我有 reporte
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why doesn't sin() return the correct value here? 我正在构建
您可能认为我完全疯了并且不擅长编程。其中之一可能是这种情况,但请阅读我的发现。 是的,我 #include Full Code can be found here. (我试图让它符合 ansi 标准
我的代码主要处理单精度 float 。对超越函数的调用相当频繁。现在,我正在使用 sin()、cos()、sqrt() 等——接受并返回 double 的函数。当它仅为 x87 编译时,我知道单精度和
我正在创建一个 3d 平面,它位于 x 轴和 z 轴上,山丘在 y 轴上延伸。大部分代码如下所示: float PeaksAndValleys::getHeight(float x, float z)
我是一名优秀的程序员,十分优秀!