c - 打印双变量内容

标签 c printing double

我尝试了以下代码片段,结果令我惊讶:

#include <stdio.h>
#include <math.h>

int main()
{
            double num;
            unsigned char ch;

            ch = 19;
            num = 1.0E+20 ;
            num += ch * 1.0E+18;
            printf("E18 = %lf \n",num);
            printf("E18 = %e \n",num);

            num = 11.0E+21 ;
            num += ch * 1.0E+19;
            printf("E19 = %lf <------\n",num);
            printf("E19 = %e <------\n",num);

            num = 11.0E+22 ;
            num += ch * 1.0E+20;
            printf("E20 = %lf\n",num);
            printf("E20 = %e\n",num);

            num = 11.0E+23 ;
            num += ch * 1.0E+21;
            printf("E21 = %lf\n",num);
            printf("E21 = %e\n",num);

            num = 11.0E+24 ;
            num += ch * 1.0E+22;
            printf("E22 = %lf <------\n",num);
            printf("E22 = %e <------\n",num);
    return 0;
}

程序的输出:

E18 = 119000000000000000000.000000 
E18 = 1.190000e+20 
E19 = 11190000000000000524288.000000 <------
E19 = 1.119000e+22 <------
E20 = 111900000000000001048576.000000
E20 = 1.119000e+23
E21 = 1119000000000000044040192.000000
E21 = 1.119000e+24
E22 = 11189999999999999366660096.000000 <------
E22 = 1.119000e+25 <------

为什么在以指数形式打印时数据会损坏

最佳答案

因为,当数字变得足够大时,您会失去精度:http://en.wikipedia.org/wiki/Floating_point

关于c - 打印双变量内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2506691/

相关文章:

c - 为什么当我指定 "%.2x"时会得到 8 个十六进制数字

C++ 十进制数据类型

objective-c - 为 iPhone (iOS 3.0+) 编译/使用 libjpeg?

c - 与 irc 服务器的连接

c++ - 如何获取给定 HWND 的工具提示文本?

Python 2.7 嵌套的 If 语句在打印数组位置后不会打印字符串文字

printing - 用于在 Ghostscript 中打印 PDF 的着色和混合分色

asp.net - 在 Google Chrome 中使用 KIOSK 模式进行静默打印(直接)

C++ 输入 double 直到按下 Enter 键

c# - c#中的小数舍入似乎是错误的