Java和C之间的浮点类型有什么不同吗?

Java和C之间的浮点类型有什么不同吗?,java,c,floating-point,Java,C,Floating Point,我正在将一个项目从C导入Java,它涉及很多浮点运算 关于将C浮点类型转换为Java,是否需要注意任何特殊规则?别担心,不需要特殊规则。Java有规则管理浮点计算中的中间结果是否使用比最终结果更高的精度。如果您的应用程序打算在多个平台上运行,您应该研究关键字。。我不确定C,但在java中,精度取决于平台,确切地说,在某些平台上,计算可能比其他平台更精确,因此导致比较结果为假而不是真。为了解决这个问题,有一个strictfp修饰符可以应用于变量或方法,并使精度保持不变,因此对浮点的比较操作将在所有

我正在将一个项目从C导入Java,它涉及很多浮点运算


关于将C浮点类型转换为Java,是否需要注意任何特殊规则?

别担心,不需要特殊规则。

Java有规则管理浮点计算中的中间结果是否使用比最终结果更高的精度。如果您的应用程序打算在多个平台上运行,您应该研究关键字。

。我不确定
C
,但在java中,精度取决于平台,确切地说,在某些平台上,计算可能比其他平台更精确,因此导致比较结果为假而不是真。为了解决这个问题,有一个
strictfp
修饰符可以应用于变量或方法,并使精度保持不变,因此对浮点的比较操作将在所有平台上产生相同的结果。

关于比较浮点数的问题,以下代码是执行此操作的常用方法:

public boolean floatEquals(float a, float b, float epsilon) {
    return Math.abs(a-b) < epsilon;
}
public boolean flootquals(浮点a、浮点b、浮点ε){
返回Math.abs(a-b)

Epsilon是一个小数字,例如0.00001

换句话说,C和C之间,或者Java和Java之间甚至可能存在差异,更不用说C和Java了。此外,由于浮点数的表示通常是近似值,因此,正如本答案中所暗示的那样,永远不应该使用浮点数的直接比较来获得布尔结果。将两个浮点数之间的差值与某个较小的值进行比较通常是一种合法的技术。