java - 机器小量

标签 java precision

我正在寻找一种在 Java 中近似 Machine Epsilon 的简单方法:

float machEps = 1.0f;

do
    machEps /= 2.0f;
while ((float) (1.0 + (machEps / 2.0)) != 1.0);

System.out.println( machEps);

返回:

1.1920929E-7

但是,当我在 while 循环中删除对 float 的转换时:

float machEps = 1.0f;

do
   machEps /= 2.0f;
while ( (1.0 + (machEps / 2.0)) != 1.0);

System.out.println( machEps);

我得到:

2.220446E-16

我不太确定这是为什么......我的猜测是在第二种情况下 Java 试图扩展 machEpsfloatdouble。但是,我不确定这是否是一个准确的陈述,或者是否还有其他原因导致我得到两个不同的答案。

最佳答案

1.02.0double

doublefloat 之间的算术运算会将 float 隐式转换为 double

您需要通过向所有文字添加 f 后缀来强制整个表达式使用 float

关于java - 机器小量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21608161/

相关文章:

java - org.springframework.web.util.NestedServletException : Handler processing failed

java - 当不可能删除时,删除应该抛出异常

math - float 学坏了吗?

java - Double 代替 Float 和 Float 舍入

java - JFrame固定宽度

java - 我如何重写这段代码以使用面向对象编程?

math - float 学有问题吗?

C++ : sin(M_PI/6) = 0. 5?

math - float 学有问题吗?

java - 为什么使用父类(super class)引用调用子类方法时会出现编译时错误?