Rodriguezs 发表于 2020-2-22 11:51

double转float遇到问题

#include <iostream>
using namespace std;

int main()
{
    double x = 2E50;
    float z = x;
    cout << z << endl; //输出结果为inf 编译环境为vs2015,不知为什么会产生这样的结果。

    return 0;
}

苏紫方璇 发表于 2020-2-22 12:09

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这么大的数字

Rodriguezs 发表于 2020-2-22 12:28

苏紫方璇 发表于 2020-2-22 12:09
double(双精度浮点型)是计算机使用的一种资料型别。比起单精度浮点数(float),double(双精度浮点数)使用...

控制台上居然输出z的值为inf,这点很奇怪,可能是编译器的警告吧?

nstar1221 发表于 2020-2-22 12:47

inf代表infinity,超出表示范围的意思,就是输出个结果,没啥好奇怪的

Rodriguezs 发表于 2020-2-22 12:51

nstar1221 发表于 2020-2-22 12:47
inf代表infinity,超出表示范围的意思,就是输出个结果,没啥好奇怪的

原来如此,谢谢。
页: [1]
查看完整版本: double转float遇到问题