跳到主要内容

Fmin

定义于头文件 <cmath> 中。

描述

返回两个浮点参数中较小的一个,将 NaN 视为缺失数据(在 NaN 和数值之间,选择数值)。该库为所有 cv-unqualified 浮点类型提供了 std::fmin 的重载,作为参数 x 和 y 的类型。

声明

// 1)
constexpr /* floating-point-type */
fmin ( /* floating-point-type */ x,
/* floating-point-type */ y );
// 2)
constexpr float fminf( float x, float y );
// 3)
constexpr long double fminl( long double x, long double y );
附加重载
// 4)
template< class Arithmetic1, class Arithmetic2 >
constexpr /* common-floating-point-type */ fmin( Arithmetic1 x, Arithmetic2 y );

参数

x,y - 浮点或整数值

返回值

如果成功,返回两个浮点值中较小的一个。返回的值是精确的,不依赖于任何舍入模式。

错误处理

此函数不受 math_errhandling 中指定的任何错误条件的影响。

如果实现支持 IEEE 浮点运算(IEC 60559

如果两个参数之一是 NaN,则返回另一个参数的值。只有当两个参数都是 NaN 时,才返回 NaN

备注

此函数不需要对零的符号敏感,尽管某些实现还强制规定,如果一个参数是 +0 而另一个是 -0,则返回 -0

不需要严格按照 附加重载 提供附加重载。它们只需要足以确保对于它们的第一个参数 num1 和第二个参数 num2

如果 num1num2 的类型是 long double,则
std::fmin(num1, num2) 与以下效果相同
std::fmin(static_cast<long double>(num1), static_cast<long double>(num2))

否则,如果 num1 和/或 num2 的类型是 double 或整数类型,则
std::fmin(num1, num2) 与以下效果相同
std::fmin(static_cast<double>(num1), static_cast<double>(num2))

否则,如果 num1num2 的类型是 float,则
std::fmin(num1, num2) 与以下效果相同
std::fmin(static_cast<float>(num1), static_cast<float>(num2))。  (直到 C++23)

如果 num1num2 具有算术类型,则
std::fmin(num1, num2) 与以下效果相同
std::fmin(static_cast</* common-floating-point-type */>(num1), static_cast</* common-floating-point-type */>(num2))

其中 /* common-floating-point-type */num1num2 类型之间具有最高浮点转换等级和最高浮点转换子等级的浮点类型,整数类型参数被视为与 double 具有相同的浮点转换等级。

如果不存在具有最高等级和子等级的浮点类型,则重载决议不会从提供的重载中产生可用的候选。

示例

#include <cmath>
#include <iostream>

int main()
{
std::cout
<< "fmin(2,1) = "
<< std::fmin(2, 1) << '\n'
<< "fmin(-Inf,0) = "
<< std::fmin(-INFINITY, 0) << '\n'
<< "fmin(NaN,-1) = "
<< std::fmin(NAN, -1) << '\n';
}
结果
fmin(2,1)    = 1
fmin(-Inf,0) = -inf
fmin(NaN,-1) = -1

Fmin

定义于头文件 <cmath> 中。

描述

返回两个浮点参数中较小的一个,将 NaN 视为缺失数据(在 NaN 和数值之间,选择数值)。该库为所有 cv-unqualified 浮点类型提供了 std::fmin 的重载,作为参数 x 和 y 的类型。

声明

// 1)
constexpr /* floating-point-type */
fmin ( /* floating-point-type */ x,
/* floating-point-type */ y );
// 2)
constexpr float fminf( float x, float y );
// 3)
constexpr long double fminl( long double x, long double y );
附加重载
// 4)
template< class Arithmetic1, class Arithmetic2 >
constexpr /* common-floating-point-type */ fmin( Arithmetic1 x, Arithmetic2 y );

参数

x,y - 浮点或整数值

返回值

如果成功,返回两个浮点值中较小的一个。返回的值是精确的,不依赖于任何舍入模式。

错误处理

此函数不受 math_errhandling 中指定的任何错误条件的影响。

如果实现支持 IEEE 浮点运算(IEC 60559

如果两个参数之一是 NaN,则返回另一个参数的值。只有当两个参数都是 NaN 时,才返回 NaN

备注

此函数不需要对零的符号敏感,尽管某些实现还强制规定,如果一个参数是 +0 而另一个是 -0,则返回 -0

不需要严格按照 附加重载 提供附加重载。它们只需要足以确保对于它们的第一个参数 num1 和第二个参数 num2

如果 num1num2 的类型是 long double,则
std::fmin(num1, num2) 与以下效果相同
std::fmin(static_cast<long double>(num1), static_cast<long double>(num2))

否则,如果 num1 和/或 num2 的类型是 double 或整数类型,则
std::fmin(num1, num2) 与以下效果相同
std::fmin(static_cast<double>(num1), static_cast<double>(num2))

否则,如果 num1num2 的类型是 float,则
std::fmin(num1, num2) 与以下效果相同
std::fmin(static_cast<float>(num1), static_cast<float>(num2))。  (直到 C++23)

如果 num1num2 具有算术类型,则
std::fmin(num1, num2) 与以下效果相同
std::fmin(static_cast</* common-floating-point-type */>(num1), static_cast</* common-floating-point-type */>(num2))

其中 /* common-floating-point-type */num1num2 类型之间具有最高浮点转换等级和最高浮点转换子等级的浮点类型,整数类型参数被视为与 double 具有相同的浮点转换等级。

如果不存在具有最高等级和子等级的浮点类型,则重载决议不会从提供的重载中产生可用的候选。

示例

#include <cmath>
#include <iostream>

int main()
{
std::cout
<< "fmin(2,1) = "
<< std::fmin(2, 1) << '\n'
<< "fmin(-Inf,0) = "
<< std::fmin(-INFINITY, 0) << '\n'
<< "fmin(NaN,-1) = "
<< std::fmin(NAN, -1) << '\n';
}
结果
fmin(2,1)    = 1
fmin(-Inf,0) = -inf
fmin(NaN,-1) = -1