|
Модераторы: LSD, AntonSaburov |
|
sasvak |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 22.2.2017 Репутация: нет Всего: нет |
Здравствуйте.
Я хочу понять: как Java складывает 2 double значения (на машинном уровне или уровне двоич.) и почему она не дает правильный ответ? Те, что происходит на глубоком уровне (шаг за шагом)? Пример:
After run: 7.5708 11.356200000000001 НО должно быть: 7.5708 11.3562 Я хочу понять (шаг за шагом): 1. Как Java преобраз. эти значения в двоич? 2. Какое представление этого двоичн ( 80 или 64 бит длины)? 3. Как Java округл. этот двоич. (7.5708 and 3.7854 not exact convert to binary, how java rounding this binary (last bit) or java cuts this binary after 64 bit without rounding)? 4. Как Java суммир. два бинарных значения? 5. Как Java округл. эту двоич. сумму? 6. Как Java преобразов. двоич. сумму в десятичную сумму? Вот как я сам ответил на первые 3 вопроса: 7.5708 = 0 10000000001 11100100100001111111110010111001001 00011101000101010 (Inexact, 1+11+52 bit = 64 bit) 3.7854 = 0 10000000000 11100100100001111111110010111001001 00011101000101010 (Inexact, 1+11+52 bit = 64 bit) Java has Round-Half-Even (Banker's Rounding), when convert decimal to binary. Я прав? |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
BigInteger же
Еще в phpunit меня добивает asserting 0 expected 1.0003 (какой нибудь), а когда вставляешь 1 все ровно проходит. Но 1 != 1.0003 (при чем в базе реально 1, просто с типом float) Просто забей. Когда точные операции нужны - ты их делай через подходящие типы/инструменты/компоненты. флоат/реал/и т.п. это ПРИБЛИЗИТЕЛЬНО. |
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 209 Всего: 537 |
Простые ответы
Классический ответ: What Every Computer Scientist Should Know About Floating-Point Arithmetic Добавлено через 2 минуты и 21 секунду Хранится все как double-precision floating-point format aka IEEE 754. Но промежуточные вычисления могут выполняться с большей точностью, если позволяет процессор и захочет JIT. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
||||
|
||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |