C против Java примитивное приведение и выражения - PullRequest
0 голосов
/ 24 февраля 2012

Почему это уравнение дает два разных значения для e в C (32-разрядная версия) и Java (64-разрядная версия)? Они неожиданно велики.

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.

UPDATE:

Извините, ребята, эта ошибка кажется чем-то другим, чем я ожидал. Я сократил свой код только до этого уравнения, и числа, которые он выдает, намного ближе.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

В 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, вы увидите разницу.

0 голосов
/ 24 февраля 2012

Здесь ответили:

Сохранение точности с двойной точностью в Java

Лучше всего было бы использовать BigDecimals, поскольку они сохраняют эту точность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...