gpt4 book ai didi

c++ - 为什么FLT_MAX和FLT_MIN不是正负无穷大,它们有什么用?

转载 作者:IT老高 更新时间:2023-10-28 21:35:29 27 4
gpt4 key购买 nike

从逻辑上讲,考虑到浮点值的性质,float 的最大和最小可表示值分别是正无穷和负无穷。

那么,为什么没有设置 FLT_MAXFLT_MIN 呢?我知道这是“标准所要求的”。但是,use 可以 FLT_MAXFLT_MIN 拥有什么,因为它们目前位于 的可表示数字范围的中间 float ?其他数字限制有一些实用性,因为它们可以保证比较(例如“没有 INT 可以测试大于 INT_MAX”)。如果没有这种保证,这些 float 限制有什么用?

一个激励 C++ 的例子:

#include <vector>
#include <limits>

template<typename T>
T find_min(const std::vector<T> &vec)
{
T result = std::numeric_limits<T>::max();
for (std::vector<T>::const_iterator p = vec.start() ; p != vec.end() ; ++p)
if (*p < result) result = *p;
return result;
}

如果 T 是整数类型,此代码可以正常工作,但如果它是浮点类型,则不能。这很烦人。 (是的,是的,标准库提供了min_element,但这不是重点。重点是pattern。)

最佳答案

FLT_MIN/MAX 的目的是告诉你最小和最大的可表示浮点数字是什么。无限不是一个数字;这是一个限制。

what use could FLT_MAX or FLT_MIN have as they currently lie in the middle of the representable numeric range of float?

它们不在可表示范围的中间。没有正浮点值 x 可以添加到 FLT_MAX 并获得可表示的数字。你会得到+INF。如前所述,这不是一个数字。

This code works fine if T is an integral type, but not if it is a floating point type. This is annoying. (Yes yes, the standard library provides min_element, but that is not the point. The point is the pattern.)

它怎么不“工作正常”?它给你最小的值(value)。唯一不能“正常工作”的情况是表包含 only +INF。即使在这种情况下,它也会返回一个实际的 number,而不是错误代码。无论如何,这可能是更好的选择。

关于c++ - 为什么FLT_MAX和FLT_MIN不是正负无穷大,它们有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7973737/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com