如何硬编码浮点数或双精度数的绝对最大值或最小值?我想通过简单地遍历并捕获最大值来搜索出数组的max/min。
浮点数也有正无穷大和负无穷大,我应该用它们来代替吗?如果是这样,我该如何在我的代码中表示呢?
发布于 2010-04-22 00:11:17
您可以使用<limits>中定义的std::numeric_limits来查找类型的最小值或最大值(只要存在针对该类型的专门化)。您还可以使用它来检索无穷大(并在前面放一个-来表示负无穷大)。
#include <limits>
//...
std::numeric_limits<float>::max();
std::numeric_limits<float>::min();
std::numeric_limits<float>::infinity();正如注释中所指出的,min()将返回可能的最低正值。换句话说,可以表示的最接近于0的正值。最低可能值是最大可能值的负数。
当然,std::max_element和min_element函数(在<algorithm>中定义)可能是在数组中查找最大或最小值的更好选择。
发布于 2010-04-22 00:34:26
可以使用-FLT_MAX (或-DBL_MAX)表示最大幅值负数,使用FLT_MAX (或DBL_MAX)表示正值。这为您提供了可能的浮点值(或双精度值)的范围。
您可能不想使用FLT_MIN;它对应于可以用浮点数表示的最小幅度正数,而不是可以用浮点数表示的最负的值。
FLT_MIN和FLT_MAX对应于std::numeric_limits<float>::min()和std::numeric_limits<float>::max()。
发布于 2010-04-22 00:17:19
要手动查找数组的最小值,您不需要知道float的最小值:
float myFloats[];
...
float minimum = myFloats[0];
for (int i = 0; i < myFloatsSize; ++i)
{
if (myFloats[i] < minimum)
{
minimum = myFloats[i];
}
}和最大值的类似代码。
https://stackoverflow.com/questions/2684603
复制相似问题