-3

我不知道这里发生了什么。

我发现以下数据类型的大小(以字节为单位):

char:1
int:4
float:4
double:8
long long int:8

Now long long int max size is 9223372036854775807
whereas double max size is 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000

什么!!!

双先生如何在 8 个字节中存储如此大的值???

4

3 回答 3

4

我需要多少个十进制数字来表示 0 到 10 100 - 1 之间的每个整数?

答案应该很明显:100 位数字。

如果我只需要 7 个有效数字,我需要多少个十进制数字来表示 0 到 10 100 - 1 之间的整数值?

您只需要 9。每个数字都可以表示为 ABCDEFG * 10 HI

doubles 的工作方式大致相同。

于 2014-10-06T14:36:33.740 回答
1

double max 作为整数 (!) 的二进制表示形式如下所示:

11111111111111111111111111111111111111111111111111111
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000

它的末尾有很多零(准确地说是 1024 个零)。在这 1024 个零之前是 53 个前导零。为什么是 53 个?因为这是可以存储在double.

重要的部分是所有这些零实际上并没有存储在双精度内。它们由指数隐含。只存储了 53 个(好吧,只有 52 个;格式也暗示了第一个)。

于 2014-10-06T14:49:56.990 回答
0

幅度的上限由决定数字精度的有效数字和决定大小的指数的组合决定。该表示法类似于科学 (n*(10**m)) 表示法,只是它以 2 为底。

很多很多以 10 为基数的整数和分数在 IEEE FP 表示法中是无法表示的,这一直是新开发人员经常遇到的问题。

于 2014-10-06T14:52:24.950 回答