.NET中long和double的最大值与大小的关系

时间:2009-10-17 16:07:19

标签: .net types

众所周知,在.NET中,long和double的大小都是8个字节。但是,double可以存储比long长得多的数字。怎么可能,考虑到double还需要在小数点后的数字上存储数据?

问题的缩短版本:

Math.Pow(2,64)== long.MaxValue Math.Pow(2,64)< double.MaxValue

3 个答案:

答案 0 :(得分:18)

简短回答双重仅存储最重要的数字,而不是数字中可能包含的所有数字。例如如果你有一个双>最大值为long,它不会存储小数点后的数字或deciaml点左侧的任何数字的任何信息。

有关所有详细信息,请参阅What every computer scientist should know about Floating-Point Arithmetic

答案 1 :(得分:2)

基于整数的类型的整数范围为-2 ^(n-1)2 ... 2 ^(n-1)-1(带符号), 或0 ... 2 ^ n-1(无符号)。

定点变量与基于整数的类型相同,只有常数因子(例如0.01:0.01 *(0 ... 2 ^ n-1))。

任何语言中的浮点变量(float和double)对指数使用几位,其余为指数前的数字。它们不太准确(x + 1可能等于x,x是一个非常大的数字),但是它的范围要大得多。

答案 2 :(得分:0)

double是浮点数。 Whitch bassicaly meams表示它作为存储在double中的数字变得更大,它正在被唤醒,并且最不重要的部分被解雇。

例如,当你有一个像1000亿的数字时,双倍。 它可能正好是100 000 000或者可能是100 000 000,000,000 000 000 000 000 001