首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java - 如何解决双接近零是无穷大?

Java - 如何解决双接近零是无穷大?
EN

Stack Overflow用户
提问于 2018-09-25 04:44:46
回答 1查看 0关注 0票数 0

目前在我的java程序中面临一个意想不到的问题。我必须对数字进行多次算术运算(这是双精度数),我看到双数组中出现无穷大值。

反转问题表明,做一个非常小的双变量的平方给出了无限的结果:

代码语言:javascript
运行
复制
// Value of a = 4.8484439536882894E154
double b = a*a; // Math.pow(a,2) give the same result

理解如下操作:

代码语言:javascript
运行
复制
double b = a/0.0;

会给我一个无限的结果,但在这里,我希望看到零,我很困惑。

我看到两种方法来解决这个问题:

  1. 更改我的号码类型(可能是“BigDecimal”类型?)
  2. 对我的数字进行舍入,使它们在真正小的时候等于零。

我主要担心的是我有效率限制(我做了很多操作),我想知道最有效的解决方案

EN

回答 1

Stack Overflow用户

发布于 2018-09-25 14:32:19

做一个非常小的双变量的平方给出了无限的结果: a = 4.8484439536882894E154

这不是一个小的价值,而是一个非常大的价值。此值的平方值超出了可以存储在double中的值。我会避免在真正的程序中使用这么大的数字。使用BigDecimal时,这将无法有效处理,除非您小心精度,否则该值可能会占用大量内存。

代码语言:javascript
运行
复制
BigDecimal bd = new BigDecimal(4.8484439536882894E154);
System.out.println(bd);
System.out.println(bd.multiply(bd));

版画

48484439536882894125356714897804823013264499883293252029671138397867940846580091139322609929685416472654290189475072478947606359471429750280124877227687936

2350740877205653148971873997825006119631878893922089422541052262471645204316961966715674184915401562416803366985802237579003549878341534545604693618995320178663111929136318299969099169324414379507555742403529385887319157122566620560154172317174133197671834101629503331734475801299228334819239184609540199940096

如果你真的需要大数字,会以对数标度存储数据

代码语言:javascript
运行
复制
double logA = Math.log10(4.8484439536882894E154);
System.out.println(logA);
double logA2 = 2 * logA;
System.out.println(logA2);

版画

代码语言:javascript
运行
复制
154.6856023796833
309.3712047593666
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档