如何处理java中的下溢?
How to deal with underflow in java?
问题来了
double a = 1.0665901062490447E-18;
double b = 1.0;
double c = a+b; // this is 1.0
我需要那个总和值。我该怎么办?
正如我在 , 1.0665901062490447E-18
is a very small value. If you need that much precision, you should be using BigDecimal
中提到的那样。像,
double a = 1.0665901062490447E-18, b = 1.0;
System.out.println(BigDecimal.valueOf(a).add(BigDecimal.valueOf(b)).toPlainString());
输出
1.0000000000000000010665901062490447
注意有一个预定义的常量BigDecimal.ONE
- 所以上面的也可以写成
System.out.println(BigDecimal.valueOf(a).add(BigDecimal.ONE).toPlainString());
几乎所有语言的基本类型都存在限制。在这种情况下,我认为 IEEE-754. In order to handle these class of problems Arbitrary Precision Libraries 绑定的 double
类型已为多种语言创建。
经典《What Every Computer Scientist
应该了解浮点数
算术 是浮点数据类型所有用途的必需阅读。
问题来了
double a = 1.0665901062490447E-18;
double b = 1.0;
double c = a+b; // this is 1.0
我需要那个总和值。我该怎么办?
正如我在 1.0665901062490447E-18
is a very small value. If you need that much precision, you should be using BigDecimal
中提到的那样。像,
double a = 1.0665901062490447E-18, b = 1.0;
System.out.println(BigDecimal.valueOf(a).add(BigDecimal.valueOf(b)).toPlainString());
输出
1.0000000000000000010665901062490447
注意有一个预定义的常量BigDecimal.ONE
- 所以上面的也可以写成
System.out.println(BigDecimal.valueOf(a).add(BigDecimal.ONE).toPlainString());
几乎所有语言的基本类型都存在限制。在这种情况下,我认为 IEEE-754. In order to handle these class of problems Arbitrary Precision Libraries 绑定的 double
类型已为多种语言创建。
经典《What Every Computer Scientist 应该了解浮点数 算术 是浮点数据类型所有用途的必需阅读。