【问题标题】:Literals e and f in floating point representation in cc 中浮点表示中的文字 e 和 f
【发布时间】:2021-01-17 00:56:13
【问题描述】:

有人能解释一下在 c 中表示浮点数时文字 e 和 f 是什么意思吗? 例如

float f = 6.8558e-4f

【问题讨论】:

  • 你的书、教程或老师怎么说?
  • 说实话,这不是一个真正的 C 问题。使用“E”或“e”来表示指数在数学和科学计算中绝对无处不在。甚至 Excel 也能理解 ;) 话虽如此,我想一个人可能会在编程课程中第一次看到它。

标签: c math floating-point


【解决方案1】:

根据 2018 C 标准,第 6.4.4.2 条,改写:

  • “一个浮点常量有一个有效数部分,后面可以跟一个指数部分和一个指定其类型的后缀。”
  • 有效数字是可能包含句点的数字序列。它以通常的方式表示一个数字。例如,3.4 代表 3 个 1 和 4 个十分之一。
  • 指数部分是eE,后跟可选符号和数字序列,例如e13e-4
  • “指数表示 10 的幂,有效数字部分将按其缩放。”
  • “无后缀的浮点常量的类型为double。如果以字母fF 为后缀,则它的类型为float。如果以字母lL 为后缀,则其类型为long double。”

因此6.8558e-4f 代表6.8558•10−4 并产生float 值。

请注意,大多数 C 实现使用基于 2 的幂而不是 10 的 float 格式,因此它们不能准确表示 6.8558•10-4。在常用的格式,IEEE-754 binary32中,最接近的可表示值为0.0006855800165794789791107177734375。

【讨论】:

    【解决方案2】:

    e 表示科学计数法。所以6.8558e-4等价于6.8558×10−4

    f 是一个表示浮点数的后缀。 (浮点数默认被视为双精度。)

    顺便说一句,C99 还为浮点数引入了十六进制表示法,您可以在此处阅读:hexadecimal floating constant in C

    【讨论】:

    • long double 常量有后缀l(或L),而不是lfdouble 常量没有后缀。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多