- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
从逻辑上讲,考虑到浮点值的性质,float
的最大和最小可表示值分别是正无穷和负无穷。
那么,为什么没有设置 FLT_MAX
和 FLT_MIN
呢?我知道这是“标准所要求的”。但是,use 可以 FLT_MAX
或 FLT_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/
这个问题已经有答案了: Why does changing 0.1f to 0 slow down performance by 10x? (7 个回答) Denormalized Numbers -
limits.h 指定非 float 学类型的限制,例如INT_MIN 和 INT_MAX。这些值是您可以使用 int 表示的最负值和最正值。 在float.h 中,有FLT_MIN 和FLT_MAX
在尝试查看在 float 下溢的情况下会发生什么情况时,我发现我可以使 float 比 FLT_MIN 小得多。我在 OS 10.9 上使用 xcode 5.1。语言方言是 gnu99。 #inclu
我是一名优秀的程序员,十分优秀!