float可以不支持负数甚至0吗?

Can floats not suport negative or even 0?

后续问题是:

理论上,我们可以假设c float 总是支持负数吗?

Can floats not suport negative or even 0?

我认为本意不是允许不支持负数或零:

ISO/IEC9899:2017

Characteristics of floating types <float.h>

... The following parameters are used to define the model for each floating-point type:

  • s sign (±1)
  • b base or radix of exponent representation (an integer > 1)
  • e exponent (an integer between a minimum emin and a maximum emax)
  • p precision (the number of base-b digits in the significand)
  • fk nonnegative integers less than b (the significand digits)

C23 措辞增加了更强的断言

ISO/IEC 9899:202x (E)

Floating types shall be able to represent zero (all fk == 0) and all normalized floating-point numbers (f1 > 0 and all possible k digits and e exponents result in values representable in the type

如果您在使用“浮点数”一词时泛指“浮点类型”(而不是名为 float 的类型):

:

如果您设计一个编译器,您可能会定义 non-standard 类型 unsigned float 具有 24 个尾数位、8 个指数位、无符号位和 256 个可能的指数值(而不是 254 个)。

这样的浮点格式只能存储正值(不等于零),也不支持无穷大或 NaN。

与具有相同位数的 float 数据类型相比,这种格式的优点是范围更广 and/or 精度更高。