Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C与Java原语转换和表达式_Java_C_Casting_Expression_Primitive - Fatal编程技术网

C与Java原语转换和表达式

C与Java原语转换和表达式,java,c,casting,expression,primitive,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 更新: 对不起,各位,这个错误似乎超出了我的

为什么这个等式在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中运行,您将看到差异。

这里已经回答了这个问题:


你最好的选择是使用大小数,因为它们可以保持这种精度。

有没有“意外的大数值”的例子?你使用了哪些输入,得到了哪些结果?在你的系统上,C和Java中的
sizeof(double)
是什么?