首页 > 解决方案 > C lang 指数长双输出(Mac OS,Xcode)

问题描述

#include <stdio.h>
#include <float.h>

int main()
{
    float num1 = FLT_MAX;
    double num2 = DBL_MIN;
    long double num3 = LDBL_MAX;

    printf("%.2f\n", num1);
    printf("%e\n", num2);
    printf("%Le\n", num3);

    return 0;
}

我正在使用 C 进行指数表示法,但我不知道为什么 long double 的输出不正确(float 和 double 的输出为

340282346638528859811704183484516925440.00
2.225074e-308

但长双有

1.189731e+4932 (in the book it says 1.797693e+308)

输出是否与每台计算机不同?那为什么我的mac只有long double的不同值而不是float和double?

标签: c

解决方案


正如 Sandeep 所说,每种数据类型的大小取决于您的编译器和机器。float并且double几乎总是 IEEE float 和 double 类型,但大小long double因机器而异。

long double 最常见的三种大小是 80 位(这似乎是您的书使用的)、64 位(与 double 相同)或 128 位(这似乎是您的计算机使用的)。

如果它为您的数据类型提供了确切的大小,那么您就没有一本好的 C 书。

尝试:printf("sizeof(long double): %d\n", (int) sizeof(long double));查看它在您的机器上的大小。


推荐阅读