c++ - max和fmax的区别(跨平台编译)

标签 c++ xcode visual-studio-2010

在 Xcode 中,这个编译很好:

float falloff = fmin(1.0, fmax(0.0, distanceSqrd/cRadius));

但是在 Visual Studio 2010 中它会出错,我必须使用 max 而不是 fmax。 distanceSqrd 和 cRadius 也是 float 。

这是我的代码中唯一不能无缝交叉编译的部分...

有什么想法吗?

最佳答案

函数std::fmaxstd::fmin来自 <cmath> header(或 fmaxfmin 来自 <math.h> )是一个 C++11 功能以及 Visual Studio 2010 尚不支持的许多其他新数学函数(也不支持2012)。因此,为了便携性,建议将它们替换为 std::minstd::max来自 <algorithm> .

实际区别在于,fminfmax是处理 float 并源自 C99 的数学函数(并且可能在可能的情况下由实际的专用 CPU 指令在本质上实现),而 minmax是可用于支持 < 的任何类型的通用算法(并且可能只是一个简单的 (b<a) ? b : a 而不是浮点指令,尽管一个实现甚至可以通过 minmax 的特化来做到这一点,但我对此表示怀疑)。

对于特殊的浮点参数,它们的行为也略有不同。虽然没有完全指定如何 minmax会回复NaN s,我认为(虽然根据上面的定义,它们应该总是返回第一个操作数),fminfmax明确指定当一个参数为 NaN 时始终返回另一个(非 NaN)参数,如果实现符合 IEEE 754(任何现代 PC 实现通常都是)。

关于c++ - max和fmax的区别(跨平台编译),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16584558/

相关文章:

c++ - 有没有办法从仿函数中提取第一个参数的类型?

Objective-C方法说明(文档注释)

Xcode 持续集成机器人在 Git 强制推送后失败

visual-studio-2010 - 如何在opencv中获取灰色图像的强度指标

windows - WiX 安装程序条件编译?

c++ - 如何在Qt中以跨平台的方式获取设置存储路径?

c++ - C++ using 在类中意味着什么?

c++ - 我怎样才能知道 OpenCV 的 VideoCapture 初始化时出了什么问题?

IOS 快速构建错误 - 命令/usr/bin/codesign 失败,退出代码为 1

c# - 为什么我们同时拥有交错数组和多维数组?