众所周知,在.NET中,long和double的大小都是8个字节。但是,double可以存储比long长得多的数字。怎么可能,考虑到double还需要在小数点后的数字上存储数据?
问题的缩短版本:
Math.Pow(2,64)== long.MaxValue Math.Pow(2,64)< double.MaxValue
答案 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