double转float遇到问题
#include <iostream>using namespace std;
int main()
{
double x = 2E50;
float z = x;
cout << z << endl; //输出结果为inf 编译环境为vs2015,不知为什么会产生这样的结果。
return 0;
} double(双精度浮点型)是计算机使用的一种资料型别。比起单精度浮点数(float),double(双精度浮点数)使用 64 位(8字节) 来储存一个浮点数。 它可以表示十进制的15或16位有效数字,负值取值范围为 -1.7976E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.797693E+308
FLOAT 数据类型用于存储单精度浮点数或双精度浮点数。浮点数使用 IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 二进制指数和一个 23 位尾数。由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。此表示形式为 float 类型提供了一个大约在 -3.4E+38 ~ 3.4E+38 之间的范围。
以上取自百度百科,由上可见float无法表示2e50这么大的数字 苏紫方璇 发表于 2020-2-22 12:09
double(双精度浮点型)是计算机使用的一种资料型别。比起单精度浮点数(float),double(双精度浮点数)使用...
控制台上居然输出z的值为inf,这点很奇怪,可能是编译器的警告吧? inf代表infinity,超出表示范围的意思,就是输出个结果,没啥好奇怪的 nstar1221 发表于 2020-2-22 12:47
inf代表infinity,超出表示范围的意思,就是输出个结果,没啥好奇怪的
原来如此,谢谢。
页:
[1]