Coretto Java浮点

Coretto Java浮点,java,corretto,Java,Corretto,Java通常在包含浮点数时遇到问题 点算术非规范与规范值包含 在进行此类操作时: double a = 0.1; double b = 0.1; double x = a*b; out.println(); out.println(x); 通过浮点或双精度类型 有人能告诉我怎么告诉Coretto Java吗 要进入非规范、精确的浮点模式 “有人能告诉我如何让Coretto Java进入非 非规范、精确浮点模式?” 这不是Corretto特有的问题。这是一个普遍的Java问题。简单的答案与在其他

Java通常在包含浮点数时遇到问题 点算术非规范与规范值包含 在进行此类操作时:

double a = 0.1;
double b = 0.1;
double x = a*b;
out.println();
out.println(x);
通过浮点或双精度类型

有人能告诉我怎么告诉Coretto Java吗 要进入非规范、精确的浮点模式

“有人能告诉我如何让Coretto Java进入非 非规范、精确浮点模式?”

这不是Corretto特有的问题。这是一个普遍的Java问题。简单的答案与在其他版本的OpenJDK中使用的方法相同

不能使用像float和double这样的Java基本类型。你必须求助于另一个数学图书馆。java.math。也许是个好的开始

jshell> import static java.math.BigDecimal.*;
jshell> var a = ONE.divide(TEN)
a ==> 0.1
jshell> var b = ONE.divide(TEN) 
b ==> 0.1
jshell> a.add(b)
$16 ==> 0.2
TLDR:

基本类型float和double在Java语言规范中定义。Java实现了其表示形式的IEEE 754定义

jshell> double a = 0.1;
a ==> 0.1
jshell> double b = 0.1;
b ==> 0.1
jshell> double x = a*b;
x ==> 0.010000000000000002
4.2.3。浮点类型、格式和值浮点类型是float和double,它们在概念上与 单精度32位和双精度64位格式IEEE 754 IEEE二进制文件标准中规定的值和操作 浮点运算,ANSI/IEEE标准754-1985(IEEE,纽约 约克)

因此,由于IEEE 754二进制表示,预期会出现以下输出

jshell> double a = 0.1;
a ==> 0.1
jshell> double b = 0.1;
b ==> 0.1
jshell> double x = a*b;
x ==> 0.010000000000000002
参考资料:


我们删除了您问题中针对Coretto开发者的句子。如果您希望联系他们(例如,请求新功能或报告错误),常见问题解答会告诉您如何做到这一点:尽管具有兼容性,Corretto是否有可能获得同步运行时切换,或者二级模式,从而允许使用范围精确的浮点beaviour?Corretto不支持它。IIRC,我不知道任何Java实现都支持它。Java是一种通用编程语言。正如我之前所说的,你们可以求助于图书馆来支持它。这与C/C++相同。如果您主要考虑数字应用程序,我认为Python是一个更好的选择。