【问题标题】:How float and double numbers are represented in ANSI C? [duplicate]ANSI C 中如何表示浮点数和双精度数? [复制]
【发布时间】:2021-10-10 02:36:47
【问题描述】:

我想了解浮点值(floatdouble)在 ANSI C 中是如何表示的。也就是说,有多少位用于表示 float 和 @987654324 的尾数和指数@值?

我不确定 ANSI C 是否采用 IEEE 754。

【问题讨论】:

  • 请注意,大多数主流平台(例如 x86-64、AARCH64)都与 IEEE 754 兼容,在这些平台上,float 是二进制 32(即单精度浮点格式的 32 位),而@987654326 @ 是 binary64(即 64 位双精度)。请注意,可选的优化级别(例如 GCC/Clang 中的 -ffast-math)可能会破坏兼容性,即使位级别表示是相同的

标签: c floating-point ieee-754 ansi-c


【解决方案1】:

C 不强制要求任何特定的浮点格式。它甚至没有说浮点类型必须是二进制的,所以实现使用十进制浮点数是有效的。事实上,有许多旧的浮点格式使用十六进制而不是二进制

就像整数类型一样,C 只是指定浮点类型的各种限制,例如基数或有效数字和指数部分中的位数,例如

  • FLT_RADIX
  • FLT_MANT_DIG、DBL_MANT_DIG、LDBL_MANT_DIG
  • FLT_MIN_EXP、DBL_MIN_EXP、LDBL_MIN_EXP
  • FLT_MAX_EXP、DBL_MAX_EXP、LDBL_MAX_EXP
  • ...

因此,如果您只想知道有多少位用于表示尾数以及浮点和双精度值的指数,则可以使用它们

更多详情请阅读 C11 的5.2.4.2.2 Characteristics of floating types <float.h>

如果您想确保实现使用 IEEE-754,那么您可以通过 __STDC_IEC_559__ 进行检查

另见

【讨论】:

    猜你喜欢
    • 2010-11-11
    • 2014-04-25
    • 2011-10-24
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2021-09-02
    • 2015-06-19
    相关资源
    最近更新 更多