【问题标题】:Does C99 assume that subnormal numbers are supported?C99 是否假设支持次正规数?
【发布时间】:2021-05-24 15:24:17
【问题描述】:

C99 是否假定支持次正规数?

发件人:

  • FP_SUBNORMAL 分类宏的存在
  • 事实上 IEEE 754 需要支持次正规数

我得出的结论是,C99 支持次正规数。这个结论正确吗?

【问题讨论】:

  • “支持”是什么意思?需要哪些功能?
  • 请问C99 语言本身是否支持次正规数?我可以用英文说“I have a car”,不代表我真的有……或者你问你编译的时候你的编译器能不能用subnormal numbers来操作?
  • “在 IEEE 754 中要求支持次正规数这一事实” 该声明的来源是什么?
  • @user694733:IEEE 754 是一个指定浮点运算的文档,该规范包括次正规数。所以 IEEE 754 是该声明的来源。更具体地说,它是 IEEE Std 754-2019。第 3.4 节规定了二进制格式的次正规数的编码。它们在算术中的使用和出现在很大程度上隐含地遵循标准中其他地方的操作规范。

标签: c language-lawyer c99 ieee-754


【解决方案1】:

C99 是否假定支持次正规数?

没有。 5.2.4.2.2。该语言定义了一个浮点数模型。然后该语言定义了该模型中的次正规浮点。然后建立一个接口,如何检测和处理次正规浮点数,以及在极端情况下如何处理它们——我的意思是,何时引发异常,何时不引发异常。

这并不意味着底层架构使用这个模型来表示浮点数。目的是以abstract 的方式编写标准,尝试提供一个接口而不要求它应该如何实现。 Note 16:

  1. 浮点模型旨在阐明每个浮点特性的描述,并不要求实现的浮点算法完全相同。

如果实现 implements Annex F浮动类型与 IEC 60559 中描述的格式匹配,因此它将具有次正规数。这是推荐的做法,但可选,通过宏检测 - 没有要求。

FP_SUBNORMAL 分类宏的存在

可能有更多的FP_[A-Z]* 宏由实现提供,用于额外的“浮点值种类”。

事实上 IEEE 754 需要支持次正规数

但 C 不需要 IEEE 754 支持。

【讨论】:

  • “用宏检测”。具体来说,__STDC_IEC_559__ 宏。
  • 如果 IEEE 754 不需要支持次正规数,那么为什么它规定 实现应提供以下非计算操作 ... boolean isSubnormal(source) -- isSubnormal(x) 当且仅当 x 是次正规的时才为真?你能详细说明IEEE 754 does not require support of subnormal numbers吗?
  • 哎呀,最后一部分错了。我的意思是C不需要IEEE754,这意味着C不需要次正规数...:/
猜你喜欢
  • 1970-01-01
  • 2011-10-05
  • 2018-07-14
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
相关资源
最近更新 更多