为什么在C#中没有比“ float”更小的字节大小的浮点类型

时间:2018-07-27 17:33:37

标签: c# floating-point

希望这是SO这类问题的第一个问题。 C#具有4种整数类型:

byte:1个字节

short:2个字节

int:4个字节

long:8个字节

但是只有两种浮点类型:floatdouble。为什么创作者没有必要提出一个小的浮动?有一个有关Minifloats的维基百科article

1 个答案:

答案 0 :(得分:2)

尝试回答-

大多数浮点值系统都基于IEEE 754标准;系统需要标准化,以便硬件制造商可以提供可互换的基于硬件的格式实现。因此,对于初学者来说,除非实现标准化,否则您将不会找到实现,而IEEE 754定义的最小格式为binary16。

https://en.wikipedia.org/wiki/IEEE_754#Representation_and_encoding_in_memory

binary16小于C#提供的最小类型,因此我们仍然留有“ C#为什么不实现binary16?”的信息。

答案可能是以下原因的组合:

  • C#设计人员可能会认为这将是一种不常用的类型(毕竟,大多数其他语言都不会实现它),并且为未使用的类型提供支持将是不明智的选择。
  • C#设计人员可能会感到这会增加一些复杂性,而当他们需要在其他平台(例如ARM)上实现C#时,他们宁可不必处理。

另外,C#表面上可以运行的最常见平台-x86-32 / 64和ARM-对binary16的硬件支持不多,或者很长一段时间都没有(见{{3} }。

最后,看起来.Net / C#背后的人们确实在考虑增加对它的支持,以及binary128等其他类型:

F16c

自18年前创建C#以来,软件开发环境发生了很大变化。如今,我们开始在GPU上运行更多代码,实际上我们在其中查找并使用binary16类型。但是,当首次创建C#时,这可能并不被视为可行的用例。既然C#-on-GPU变得越来越大,越来越可行,那么语言设计人员将重新评估设计并随着语言使用的发展而发展,这是有道理的。看来他们确实在这样做。

相关问题