浮点类型名称匹配整数类型名称?

时间:2010-02-26 10:49:49

标签: c# naming-conventions types

我不得不说当我打开c#以查看整数数据类型为Int16,Int32 and Int64时,我很高兴。它消除了任何歧义,例如随着年龄的增长而增加。

让我感到惊讶的是为什么没有或似乎没有Float16,Float32 and Float64 或者至少不在正常使用中:快速搜索MSDN是指float64为R8(非托管类型)不是这个与双重相同

据我所知,我认为单声道和双声道(甚至是扩展(Float80)中没有那么多的歧义,这在c#中是不存在的,我不知道如何为此编组。虽然Decimal似乎是Float128,但我注意到它被称为“扩展浮点精度”,我们是否应该看到Int128与它相匹配?
编辑:在Single或Double中没有任何歧义(这是猜测,但它似乎是真的,我想我会为了清晰起见添加它。)

我们是否应该期待看到这种命名惯例?如果我们这样做,你会欣赏吗?

或者我们应该更进一步,Int<N>是否适用于任意号码? (是的,我意识到那里有支持这种事情的图书馆)

2 个答案:

答案 0 :(得分:1)

嗯,这里有各种不同的事情需要考虑:

  • .NET公开的类型
    • 有什么可用
    • 每种类型的名称
  • 最终被其他语言别名的东西,例如: C#使用int表示System.Int32

我个人更喜欢Float32Float64作为CLR类型。我当然可以在F#中看到一些混淆,命名类型为“float”(对于System.Double)和“float32”(对于System.Single)。我不希望Decimal被称为Float128;可能Decimal128允许其他类似的类型。

请注意,Byte不是UInt8 - 大概是因为字节通常用于任意二进制存储而不是真正的数字量。

我认为没有太多理由为Int<N>设置任意值。至少,我怀疑这种用法足够专业,可以将它转移到自定义类库,而不是让它成为框架的一部分。 (但请注意,BigInteger是.NET 4.0的一部分。)

答案 1 :(得分:0)

嗯,它在C#中浮动和加倍,而不是单一和双重,但它是相同的一般差异。请记住,有一个alias in C# for every built-in type。至于任意数字大小,F#引入了BigInteger,它应该处理这个问题,但是指定整数可以容纳的有理数的任意大小很可能是性能损失,因为内置类型都很精细调整到CLR的性能。

此外,十进制不是IEEE意义上的浮点类型。当然,它是一种允许浮动小数点的高精度类型,但它不是IEEE意义上的“浮点类型”。除了有限的精度之外,它不会做浮动将会发生的奇怪事情(例如2x2 = 3.9999999999999),因此,它经常用于财务计算。

如果您真的在寻找可以让您大量处理数字的东西,那么您可能希望使用像F#这样的函数式语言而不是C#。无论如何,函数式语言通常在重度运算时更好......它们往往更简洁。

至于命名约定......我开始使用C#... C#是我的标准,所以对我来说,其他语言都很奇怪。我想,这完全取决于开发人员的观点。