c - 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?
解决方案
正如 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));
查看它在您的机器上的大小。
推荐阅读
- c++ - 如何包含名称中包含`>`的头文件?
- android - 如何在低分辨率 LED 板上显示 android 应用程序
- openshift - Openshift Origin OKD 错误修复和补丁
- javascript - 我无法在 p5js 应用程序中打开我的代码,我在 p5js 网络编辑器中创建了代码
- java - find-bug 错误字符串无法转换为 Util.Map
- php - 在 Single.php 中显示带有描述的帖子标签(不是所有标签,只有带有描述的帖子的标签)
- javascript - Angular 7如何从动态HTML执行脚本标签
- php - Symfony 2.8 -> 3.4 升级 IsGranted('IS_AUTHENTICATED_ANONYMOUSLY') 抛出错误
- angular - 如何修复:“core-js es6-reflect not found”,当在玩笑中使用“automock:true”时?
- ios - 如何使用 PHImageManager 获取原始图像