整数的范围
“玩”算法,对各种类型的“数”能表达的数据范围要心里有数。
- 8 位有符号整数能表示的范围是 −128 到 127,无符号时能表示的范围是 0 ~ 255。
- 16 位的有符号整数能表示的范围是 −32768 到 32767,无符号时能表示的范围是 0 ~ 65535。
- 32 位的有符号整数能表示的范围是 −2,147,483,648 到 2,147,483,647,无符号时能表示的范围是 0 ~ 4,294,967,295。
- 64 位的有符号整数能表示的范围是 −9,223,372,036,854,775,808 到 9,223,372,036,854,775,807,无符号时能表示的范围是 0 ~ 18,446,744,073,709,551,615。
什么叫心里有数?32 位整数最大能表示大概 42 亿多一点,如果算法要表示某地的人口数,设计数据模型时用 32 位整数也就够了,但是要表示全球人数就不行了。一光年大约 9,460,730,472,580,800 米,从地球到仙女座星系的距离是 254 万光年,已经超出了 64 位整数能表达的范围。我们在设计数据结构的时候,要对问题的规模做到心中有“数”,不要用错数据类型。
大整数库
超过 64 位的超级大数怎么办?如果你要解决的问题需要这么大范围的数,可以考虑使用大整数。Python、Lisp 等语言都内建了大数计算机制,Java 也有 BigInteger 和 BigDecimal 分别用于大整数和大实数的计算。然而,C/C++ 没有内建的机制或类型支持大数计算,但是 C/C++ 有很多高性能的第三方大数库可供选择。
本文介绍了整数的范围,强调了在算法设计中选择合适数据类型的重要性。讨论了大整数库,如Python、Java的大数支持,以及C/C++的GMP和Miracl等高性能库。接着,文章探讨了浮点数的精度问题,指出双精度浮点数虽范围广泛,但科学计算中精度不足。最后,阐述了浮点数误差的来源,建议避免直接使用浮点数进行相等比较。
订阅专栏 解锁全文
3434

被折叠的 条评论
为什么被折叠?



