我试图找到我可以存储在单个precission浮点数中的最小(正)值(最接近零)。使用<limits>
头部我可以获得该值,但如果我让它更小,浮点数仍然可以容纳它,它给出了正确的结果。下面是一个测试程序,用g++ 5.3.0编译。
#include <limits>
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
float a = numeric_limits<float>::max();
float b = numeric_limits<float>::min();
a = a*2;
b = b/pow(2,23);
cout << a << endl;
cout << b << endl;
}
字符串
正如我所料,“a”给出无穷大,但“b”保持良好的结果,即使在最小值除以2^23之后,它仍然给出0。
给出numeric_limits<float>::min()
的值是2^(-126),我相信这是正确的答案,但为什么我的内存中的浮点数是如此之小?
3条答案
按热度按时间eblbsuwk1#
浮点类型的
std::numeric_limits::min
给出了可以在不损失精度的情况下表示的最小非零值。std::numeric_limits::lowest
给出了最小的可表示值。对于IEEE表示,这是一个次正常值(以前称为非正常值)。l7mqbcuq2#
维基百科https://en.wikipedia.org/wiki/Single-precision_floating-point_format:
最小正正规值为2^−126 <$1.18 × 10^−38,最小正(反正规)值为2^−149 <$1.4 × 10^−45。
所以
字符串
我得到了:
型
iszxjhcz3#
我试图找到最小值(最接近零),我可以存储在一个单一的精度浮点数
0是可以存储在任何精度浮点数中的最接近0的值。实际上,可以以两种方式存储它,因为有正0和负0。
编辑:我编辑了这个问题,以指定积极的,但这是正确的答案,什么是最初提出的。