我的一个问题最近被重复关闭,但这并没有完全帮助我。我的新问题和更具体的问题是:
可以将所有小于1.7e308且大于0的值(整数,没有任何小数部分)存储在 double 数据类型中,因为1.7e308是的最大值双数据类型?因为我不想要一个十进制数字,但是一个很大的非十进制数字,即使是很长的长也无法表示。
答案 0 :(得分:0)
所有浮动类型数字(halfs / floats / double / long double / etc等)由尾数和指数组成。
假设您有1.7e308
,1.7
是尾数,而308
是指数。你不能在浮点数中将两者完全分开。这是因为每个浮点数都表示为上述内存中的组合。因此,您不能拥有“非小数”浮点数。
答案 1 :(得分:0)
小于1.7e308且大于0的所有整数都可以存储在双数据类型
中
简单的答案是否。
有各种方法可以得出这个结论,但这里有一个甚至不依赖于对浮点数格式的理解。
double
是64位表示。double
值:约为1.8 x 10 19 double
是否可以表示0到1.7 x 10 308 之间的所有整数。您最简单的选择是使用BigInteger
。
但是你这样说:
...但由于BigIntegers的操作速度慢,我将它作为最后的选择。将两个4位数字相乘需要大约一秒钟。
这根本不是真的。如果您通过基准测试得出结论,那么您的方法就会出现问题。
使用BigInteger
乘以2 x 4位数字的时间应该不到一微秒。