为了账号安全,请及时绑定邮箱和手机立即绑定

可以存储在双倍中的最大整数

可以存储在双倍中的最大整数

可以存储在双倍中的最大整数什么是最大的“无浮点”整数,可以存储在IEEE 754双类型而不失去精度?
查看完整描述

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

最大/最大的整数,可以存储在一个双,而不失去精度是相同的,最大可能的值一倍。那是,DBL_MAX约1.8×10308(如果您的Double是IEEE 754 64位双)。是个整数。完全代表了。你还想要什么?

继续,问我最大的整数是多少?和所有较小的整数可以存储在IEEE 64位双倍,而不会失去精度。ieee 64位双机有52位尾数,所以我认为它是2位。53:

  • 253

    +1不能存储,因为开头的1和结尾的1之间有太多的零。
  • 少于2

    53

    可以存储,其中52位显式地存储在尾数中,然后指数实际上给出了另一位。
  • 253

    显然可以存储,因为它的功率很小,只有2。

或者另一种看待它的方法:一旦将偏差从指数中取下来,而忽略了符号位与问题无关,由双倍存储的值等于2的幂,再加上一个52位整数乘以2。指数−52..因此,使用指数52,您可以存储来自2的所有值。52通至253−1.然后用指数53,你可以在2之后存储下一个数字。53是253 + 1 × 253−52..因此,精度损失首先发生在2。53 + 1.


查看完整回答
反对 回复 2019-06-17
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

9007199254740992(即9,007,199,254,740,992),没有任何保障:

程序

#include <math.h>
#include <stdio.h>

int main(void) {
  double dbl = 0; /* I started with 9007199254000000, a little less than 2^53 */
  while (dbl + 1 != dbl) dbl++;
  printf("%.0f\n", dbl - 1);
  printf("%.0f\n", dbl);
  printf("%.0f\n", dbl + 1);
  return 0;
}

结果

9007199254740991
9007199254740992
9007199254740992


查看完整回答
反对 回复 2019-06-17
  • 3 回答
  • 0 关注
  • 553 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信