【发布时间】:2013-11-24 21:03:30
【问题描述】:
非 IEEE754 浮点类型 float、double 和 long double 的大小如何限制?
我知道每个浮点类型必须能够表示来自较小类型的所有值,这意味着sizeof(float) <= sizeof(double) <= sizeof(long double)。
据我所知,float.h/cfloat 的最低要求是 sizeof(float)*CHAR_BIT>=32、sizeof(double)*CHAR_BIT>=64 和 sizeof(long double)*CHAR_BIT>=64。
还有其他限制吗?如果是这样,它们是什么,是否意味着这些尺寸的最大值?
【问题讨论】:
-
取决于您所谈论的任何浮点格式的定义。我知道的那些是因为就像 IEEE754 一样,每一个的大小都是固定的,因此你不能在其中放置比你可用的更多的位。
-
问题是什么?
-
char不需要为 8 位,因此它们的大小都可以为 1。在 64 位 DSP 上这实际上是合理的。 -
我可以轻松地制作
sizeof(float)>sizeof(double)——只是浪费float中的空间。 -
@HansPassant:啊,但是拥有一个标准的全部乐趣在于我们不必想象什么奇怪的实现会实际使用 IEEE-754。我们只是相信委员会允许这样做是个好主意(或者不同意委员会并编写不严格可移植的代码,ofc)。
标签: c++ c floating-point ieee-754