【问题标题】:Difference in the amount of decimal numbers between double and long doubledouble 和 long double 之间十进制数的差异
【发布时间】:2021-09-30 10:56:09
【问题描述】:

double数据类型和c中long double数据类型的十进制值数量有什么区别?

【问题讨论】:

  • 内存中的表示,double数据用8字节表示,long double用16字节表示,可以表示比普通d​​ouble变量大得多的数字
  • C 不需要遵循IEEE 754,但许多实现(在某种程度上)这样做。
  • 请记住,这些位数是近似的。大多数机器使用二进制浮点,而不是十进制。因此,虽然double 类型可以区分数字 1.000000000000001 和 1.000000000000002,但它不能使用这些十进制数字表示这些数字,也不能准确地表示其中任何一个。
  • @MichaelGabbay:doublelong double 类型的大小因 C 实现而异。 C 标准不要求 double 有 8 个字节或 long double 有 16 个字节。
  • @EricPostpischil 感谢您的评论

标签: c floating-point


【解决方案1】:

C 不要求 doublelong double 之间的有效小数位数有差异。它们可能是相同的。

要报告浮点类型可以至少忠实编码的有效十进制位数,请参阅xxx_DIG

#include <float.h>

printf("long double %d\n", LDBL_DIG); // min: 10, Typically 15, 18 or 33
printf("double %d\n", DBL_DIG);       // min: 10, Often 15
printf("float %d\n", FLT_DIG);        // min:  6, Often 6

【讨论】:

    【解决方案2】:

    double - 15 位小数

    long double - 19 位小数(在使用 80 位格式的系统上)

    80 位是最常见的格式,但并非在所有系统上都可用。

    https://en.cppreference.com/w/c/language/arithmetic_types#Real_floating_types

    https://www.tutorialspoint.com/cprogramming/c_data_types.htm

    【讨论】:

    • 好建议。修改后的答案。
    • 计算尺:3位数。足以让人们登上月球。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多