8

第3-9课:浮点数和大数

 3 years ago
source link: https://blog.csdn.net/orbit/article/details/108729362
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

整数的范围

“玩”算法,对各种类型的“数”能表达的数据范围要心里有数。

  • 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++ 有很多高性能的第三方大数库可供选择。

GMP 开源大数库是一个任意精度的大整数运算库,它包括了任意精度的整数、浮点数的各种基本运算操作。它是一个 C 语言的库


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK