java - C 与 Java 原始转换和表达式

标签 java c casting expression primitive

为什么这个方程在 C(32 位)和 Java(64 位)中为 e 产生两个不同的值?他们的差距出乎意料地大。

int a, b, c, d;
double e;

a = -12806;
b = 1;
c = 800;
d = 19209;

double f = (32768 / 10.24);

e = (a + (double) b / c * d) / f;

C 产生 -3.9940624237060547。 Java 产生 -3.9943714843750002。

更新:

抱歉各位,这个错误似乎超出了我的预期。我将代码简化为这个方程式,并且它产生的数字更接近。

最佳答案

在 Java 中,隐式大括号有点不同:

    int a, b, c, d;
    double e;

    a = 3;
    b = 4;
    c = 5;
    d = 6;
    e = a + (double) b / c * d;
    System.out.println("e=" + e);
    e = a + (((double) b) / c) * d; // Java: 7.8
    System.out.println("e=" + e);

如果您在 C 语言中运行它,您将看到差异。

关于java - C 与 Java 原始转换和表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424213/

相关文章:

c - 将数字拆分为C中的位值

c# - 将 T 转换为具有接口(interface)?

c# - 如何将 ulong 转换为正 int?

java - 按钮上的 gwt 操作

java - 有一个可以动态更改顺序的 Java Comparator 可以吗?

c - 使用 C 使用 libFLAC 解码数据

c - 如何以编程方式查找计算机的套接字等待队列大小?

java - 使用泛型多个边界的未经检查/未经确认的强制转换

java - 如何将 .java 文件及其 mysql 数据库转换为 .exe

c# - 如何从c#代码中调用java中的方法?