【问题标题】:Why there is no floating point type smaller in byte-size than 'float' in C# [closed]为什么在 C# 中没有比“float”更小的字节大小的浮点类型 [关闭]
【发布时间】:2018-07-27 17:33:36
【问题描述】:

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

byte:1 个字节

short:2 个字节

int:4 个字节

long:8 个字节

但只有两种浮点类型:float 和 double。为什么创作者不觉得有必要想出一个小花车?有一个关于 Minifloats 的 Wikipedia article。

【问题讨论】:

  • 我的第一个猜测是因为这种类型在 C 语言家族中不存在,而且他们认为没有必要。不幸的是,除了 Eric Lippert 之外,您可能得到的只是猜测。
  • 正如@BradleyDotNET 所说,这是一个非常适合开发团队的问题。另外,您链接的 Wiki 页面的第一段回答了这个问题:可以预见,它们不太适合通用数值计算。它们用于特殊目的,最常用于计算机图形,其中迭代很小,精度具有美学效果。 .NET 世界并不真正专注于图形,所以也许他们觉得不值得付出努力。

标签: c# floating-point


【解决方案1】:

提供答案尝试-

大多数浮点值系统都基于 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 没有太多硬件支持,或者很长一段时间都没有支持(参见 F16c) .

最后,.Net/C# 背后的人似乎确实在考虑添加对它的支持,以及其他类型,如 binary128:

https://github.com/dotnet/corefx/issues/17267

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

【讨论】:

    猜你喜欢
    • 2017-09-29
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多