是否存在超过双精度数字的java数据类型?

czq61nw1  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(410)

此问题已在此处找到答案

在java中使用double保持精度(22个答案)
3小时前关门了。
在java中是否有一种数据类型可以处理/存储超过double类型的数字?据我所知,java type double可以存储范围为1.0e+38到1.0e-45的数字。
如果我需要java程序读取超过数字精度1.0e+38和1.0e-45的数字,该怎么办?例如1.0e-180。目前这些数字被识别为0.0。别问我为什么需要这么荒谬的数字。我得到了别人给我的东西。

2ekbmq32

2ekbmq321#

据我所知,java type double可以存储范围为1.0e+38到1.0e-45的数字。
不正确;它可以走得更远 1.7976931348623157 * 10^3084.9406564584124654 x 10^-324 .
但是,在一个double中最多只能存储2^64个数字(原因:请考虑一下)。鸽子洞原理)。在0和1之间有无限多的数字,更不用说在这两个极端之间了。Double的工作方式是,一直默默地四舍五入到最接近的数字,即所选的几个2^64中的一个。让我们称这些数字为受祝福的数字。
这些数字分布不均。在0附近,有很多这样的元素,当你离开0时,它们会越来越少。最终(在2^52左右),任何两个受祝福的数字之间的距离都大于 1.0 .
bigdecimal是一种解决方案。还有其他一些(对于初学者来说,double可以表示1e-108-您在“将输入数据转换为双值”代码中犯了错误),但请记住,在这些极端情况下,double是非常不准确的。
像这样的数字的bd速度非常慢,而且开箱即用,bds不能开箱即用(因为同样的原因,你不能用1除以3得到一个完美的结果:0.333333。。。在哪里停止?——您需要对其进行配置,使其在某个点中断。它们很难使用,但也许是你唯一的选择。

相关问题