|
|
|
Сложение двух чисел в Java SE
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Я хочу понять: как Java складывает 2 double значения (на машинном уровне или уровне двоич.) и почему она не дает правильный ответ? Те, что происходит на глубоком уровне (шаг за шагом)? Пример: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 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 1110010010000111111111001011100100100011101000101010 (Inexact, 1+11+52 bit = 64 bit) 3.7854 = 0 10000000000 1110010010000111111111001011100100100011101000101010 (Inexact, 1+11+52 bit = 64 bit) Java has Round-Half-Even (Banker's Rounding), when convert decimal to binary. Я прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 02:05 |
|
||
|
Сложение двух чисел в Java SE
|
|||
|---|---|---|---|
|
#18+
sashavak, https://www.ibm.com/developerworks/ru/library/j-jtp0114/ Использование чисел с плавающей точкой и десятичных чисел в программах Java чревато трудностями. Числа с плавающей точкой и десятичные числа ведут себя совсем не так хорошо как целые, и Вы не можете предположить, что в действительности делают вычисления с плавающей точкой, у которых "должны" быть целочисленные или точные результаты. Лучше всего приберечь использование арифметики с плавающей точкой для вычислений, которые требуют принципиально неточных значений, например измерений. Если Вам необходимо представить величины с фиксированной точкой, например, доллары и центы, то используйте BigDecimal ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 04:40 |
|
||
|
Сложение двух чисел в Java SE
|
|||
|---|---|---|---|
|
#18+
sashavak1. Как Java преобраз. эти значения в двоич? Как все. то же будет в Си. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 06:25 |
|
||
|
Сложение двух чисел в Java SE
|
|||
|---|---|---|---|
|
#18+
sashavak1. Как Java преобраз. эти значения в двоич? tutorialThe double data type is a double-precision 64-bit IEEE 754 floating point. https://ru.wikipedia.org/wiki/IEEE_754-2008 sashavak2. Какое представление этого двоичн ( 80 или 64 бит длины)? RTFM sashavak3. Как 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)? Никак не округляет. Возьми и переведи приведенные значение в двоичный вид, а затем обратно. sashavak4. Как Java суммир. два бинарных значения? А какие есть варианты? sashavak5. Как Java округл. эту двоич. сумму? Смотри #3 - никто ничего не округляет. Просто при выводе, есть определенный лимит для десятичных символов. [/quot] 6. Как Java преобразов. двоич. сумму в десятичную сумму? [/quot] Чем "сумма" отличается от "числа"? Ещё ссылки из гугла для любознательных https://habrahabr.ru/post/112953/ https://neerc.ifmo.ru/wiki/index.php?title=Представление_вещественных_чисел http://www.softelectro.ru/ieee754.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 09:27 |
|
||
|
Сложение двух чисел в Java SE
|
|||
|---|---|---|---|
|
#18+
sashavakи почему она не дает правильный ответ? 1/3 = 0.3333 0.3333+0.3333+0.3333=0.9999 1=0.9999 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 10:06 |
|
||
|
Сложение двух чисел в Java SE
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, большое спасибо, но хотелось бы все понять по шагам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 16:13 |
|
||
|
Сложение двух чисел в Java SE
|
|||
|---|---|---|---|
|
#18+
sashavakBlazkowicz, большое спасибо, но хотелось бы все понять по шагам. Десятичное в двоичное http://class.ece.iastate.edu/arun/Cpre305/ieee754/ie4.html Сложение http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BinMath/addFloat.html Двоичное в десятичное http://class.ece.iastate.edu/arun/CprE281_F05/ieee754/ie5.html Вопросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 16:26 |
|
||
|
Сложение двух чисел в Java SE
|
|||
|---|---|---|---|
|
#18+
BlazkowiczsashavakBlazkowicz, большое спасибо, но хотелось бы все понять по шагам. Десятичное в двоичное http://class.ece.iastate.edu/arun/Cpre305/ieee754/ie4.html Сложение http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BinMath/addFloat.html Двоичное в десятичное http://class.ece.iastate.edu/arun/CprE281_F05/ieee754/ie5.html Вопросы? В этих материалах совершенно не поднимаются вопросы округления. Раз уже коснулись темы округления то я бы хотел для начала более подробно проконсультироваться у вас по поводу первых трех моих вопросов c моими доп. объяснениями: 1. Как Java преобраз. эти значения в двоич? С этим более менее мне понятно: 7.5708 = 0 10000000001 1110010010000111111111001011100100100011101000101010 (Inexact, 1+11+52 bit = 64 bit) 3.7854 = 0 10000000000 1110010010000111111111001011100100100011101000101010 (Inexact, 1+11+52 bit = 64 bit) За исключением того, что это уже округленные значения. 2. Какое представление этого двоичн. ( 80 или 64 бит длины)? Понятно что в конечном итоге буде 64 битное представление указанное выше, но перед тем как оно будет java перекидывает десятичное значение в 80 битное (или даже больше, не знаю точно какое) двоичное представление, а затем округляет его методом Java has Round-Half-Even (Banker's Rounding) но как он пошагово действует я не понимаю , может быть вы знаете? 3. Как Java округл. этот двоич. (7.5708 and 3.7854 не могут точно быть преобразованы в двоичн., java округляет их в последнем или нескольких последних битах)? Хотелось бы ваших более подробных комментариев по моим первым 3 вопросам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2017, 23:10 |
|
||
|
Сложение двух чисел в Java SE
|
|||
|---|---|---|---|
|
#18+
sashavak, - IEEE 754 - стандарт двоичной арифметики с плавающей точкой - Rounding Algorithms 101 (англ.) - Online-конвертор - strictfp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 02:24 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39408199&tid=2123095]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 368ms |

| 0 / 0 |
