C# 十进制数据类型如何计算如此长的范围,而它';s的精度仅为29位

C# 十进制数据类型如何计算如此长的范围,而它';s的精度仅为29位,c#,decimal,C#,Decimal,Decimal在如此大的范围(1.7E+308)内进行计算的实际机制是什么,而它的精度只有29位,也只需要8个字节。它不-Decimal最多只能计算29位,最大值是79228162514264337593543950335 然而,double的有效数字较少,但范围更大。它通过对更大的数字变得更不精确来实现这一点。双精度中的指数部分可能比十进制中的指数部分大得多 我有一些关于.NET中的二进制和浮点运算的文章,这些文章更详细地解释了存储格式 哦,decimal需要16个字节,而不是8个。但是我们如

Decimal在如此大的范围(1.7E+308)内进行计算的实际机制是什么,而它的精度只有29位,也只需要8个字节。

它不-
Decimal
最多只能计算29位,最大值是79228162514264337593543950335

然而,
double
的有效数字较少,但范围更大。它通过对更大的数字变得更不精确来实现这一点。双精度中的指数部分可能比十进制中的指数部分大得多

我有一些关于.NET中的二进制和浮点运算的文章,这些文章更详细地解释了存储格式


哦,
decimal
需要16个字节,而不是8个。

但是我们如何使用decimal类型计算(7E+307+1E+307)?@VIKRAM:你不能。如果使用
1E+307m
,则会出现
浮点常量超出decimal类型范围的错误。如果没有
m
,它将是
double
文本而不是
decimal
@VIKRAM-
decimal d=1E307
=无法将浮点文本转换为十进制的错误<代码>十进制d=1E307m
=浮点常量超出十进制范围的错误。你说的是哪种十进制类型?那么双重机制是什么calculations@VIKRAM:按照我答案中的链接查看存储如何工作。基本上,小数字的精度(绝对值)要比大数字高很多。