我不得不说当我打开c#以查看整数数据类型为Int16,Int32 and Int64
时,我很高兴。它消除了任何歧义,例如随着年龄的增长而增加。
让我感到惊讶的是为什么没有或似乎没有Float16,Float32 and Float64
或者至少不在正常使用中:快速搜索MSDN是指float64为R8(非托管类型)不是这个与双重相同
据我所知,我认为单声道和双声道(甚至是扩展(Float80)中没有那么多的歧义,这在c#中是不存在的,我不知道如何为此编组。虽然Decimal似乎是Float128,但我注意到它被称为“扩展浮点精度”,我们是否应该看到Int128与它相匹配?
编辑:在Single或Double中没有任何歧义(这是猜测,但它似乎是真的,我想我会为了清晰起见添加它。)
我们是否应该期待看到这种命名惯例?如果我们这样做,你会欣赏吗?
或者我们应该更进一步,Int<N>
是否适用于任意号码? (是的,我意识到那里有支持这种事情的图书馆)
答案 0 :(得分:1)
嗯,这里有各种不同的事情需要考虑:
int
表示System.Int32
我个人更喜欢Float32
和Float64
作为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#是我的标准,所以对我来说,其他语言都很奇怪。我想,这完全取决于开发人员的观点。