为什么math.h中没有钳位功能

Pha*_*rap 7 c++ std

math.h去提供minmax但不是钳位功能的麻烦.我本以为,因为它们通常都是类似的实现方式,所以它们都会出现在同一个库中.

是否有任何特殊原因math.h没有钳位功能|宏?难道创造者math.h认为没有必要,或者他们只是不考虑它?

编辑:似乎人们忽略了这一点.我不是在问为什么他们不加钳,因为我很懒,不喜欢写一个新夹子 - 恰恰相反,我几乎没有使用它(虽然我承认我使用它比使用一些标准更多库).

我要问的是"有没有人知道为什么c ++标准化机构或创作者或任何选择不包含钳位功能的人math.h?".

我绝不抱怨它不在math.h,我只是在问"它有没有充分的理由不存在?".

编辑:我明确 没有问如何编写clamp()函数.

Rio*_*iot 11

其他答案不再有效,因为std :: clamp现在是C++ 17.

在撰写本文时,GCC不支持,但将在GCC 7中.


abl*_*igh 9

也许是因为:

double clamp(double x, double upper, double lower)
{
    return min(upper, max(x, lower));
}
Run Code Online (Sandbox Code Playgroud)

使用的字符少于您的问题.

另一种无类型方法是

#define CLAMP(x, upper, lower) (MIN(upper, MAX(x, lower)))
Run Code Online (Sandbox Code Playgroud)

假设你有正常形式的宏MINMAX宏.

模板化C++版本可以实现如下:

template<class T>
const T& clamp(const T& x, const T& upper, const T& lower) {
    return min(upper, max(x, lower));
}
Run Code Online (Sandbox Code Playgroud)

当然,后者不适用于良好的C.

为了更具建设性,该功能不在标准库中,因为作者并不觉得需要它足以添加它.很明显如何实现你想要的功能(见上文),所以没有特别的困难.一旦您对库中的内容有了标准,添加更多功能就会冒与现有代码冲突的命名空间,需要文档,测试等,因此任何新功能都需要跨越一般有用性的阈值.

  • 没有对此进行投票,但这不能回答问题。最小函数和最大函数可以说相同。如果您将此模板化,我将补偿;-) (2认同)

pau*_*s86 6

虽然我不能真正回答这个问题,无论如何,我会加入我的两分钱.在此标准委员会页面上搜索数学函数后,我找不到任何clamp()功能.

除了其他类似的文件之外,我确实找到了这份提供数学函数的PDF文件; 大多数看起来很专业.这让我相信clamp()标准库中缺少类似函数,因为没有人提出它.

就个人而言,我宁愿看到简单的(加入到比功能标准库,将最有可能永远不会被开发商99%被用于经常使用)数学函数.对于后者,有专门的图书馆,但这当然是我无关紧要的意见.

我希望看到的标准中增加了一个例子:(优秀)GLM库的大部分核心功能.这包括clamp():-)

也许现在是时候撰写提案并提交意见或批准; 这是解决问题的唯一方法.页面显示有关提案的信息.