powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Чудеса от float и double
49 сообщений из 49, показаны все 2 страниц
Чудеса от float и double
    #35343794
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем!

Вот такие для себя чудеса обнаружил.
В JSP существует jsp:usebean - массив объектов c дробными значениями (float или double, суть не меняется), например - 2156.1, 23.11, 45689.8, .... 2345.5. Значения c дробной частью не более двух знаков. Суммирую значения в цикле, показываю. И удивляюсь! Итоговая сумма в дробной части не сходится! Если применяю double-тип, то вообще страшные цифры лезут - 23456.499999.
Это так положено или что-то я не так сделал? Можно ли в JSP проводить вычисления?

С уважением, Семен Попов
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35343846
askme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovЗдравствуйте всем!

Вот такие для себя чудеса обнаружил.
В JSP существует jsp:usebean - массив объектов c дробными значениями (float или double, суть не меняется), например - 2156.1, 23.11, 45689.8, .... 2345.5. Значения c дробной частью не более двух знаков. Суммирую значения в цикле, показываю. И удивляюсь! Итоговая сумма в дробной части не сходится! Если применяю double-тип, то вообще страшные цифры лезут - 23456.499999.
Это так положено или что-то я не так сделал? Можно ли в JSP проводить вычисления?

С уважением, Семен Попов

можно. see Java Language Reference

float + float = double.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35343855
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovИтоговая сумма в дробной части не сходится!Каким образом ты это смог проверить? С чем сравнивал?
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35343865
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovЗдравствуйте всем!

Вот такие для себя чудеса обнаружил.
В JSP существует jsp:usebean - массив объектов c дробными значениями (float или double, суть не меняется), например - 2156.1, 23.11, 45689.8, .... 2345.5. Значения c дробной частью не более двух знаков. Суммирую значения в цикле, показываю. И удивляюсь! Итоговая сумма в дробной части не сходится! Если применяю double-тип, то вообще страшные цифры лезут - 23456.499999.
Это так положено или что-то я не так сделал? Можно ли в JSP проводить вычисления?

С уважением, Семен Попов
1) это так положено (особенность типов float и double, JSP тут ни при чем)
2) в JSP вычисления делать можно, но лучше не стоит

Многие рекомендуют использовать BigNumber в такой ситуации. Но с ним тоже нужно быть аккуратным.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35343960
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот примерно, что делаю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
<BODY>
...
<jsp:useBean id="reprslt"  class ="com.pfrkomi.penstransit.domain.SelectResponse" scope="request"/>
<% 
    double  Totals = 0 ;
    double  DoubleVar= 0 ;
    short  Counter= 0 ;
...
%>
<DIV align="center">
<TABLE cellpadding="1" cellspacing="0">
...
<TBODY>
<c_rt:forEach var="row" items="<%=reprslt.rows%>">
 <%ArrayList row = (ArrayList)pageContext.getAttribute("row"); 
   Counter++; 
   DoubleVar=((Number)row.get("Field")).doubleValue();
   Totals+=DoubleVar; %>
 <TR> 
  <TD align="right"><%=DoubleVar%></TD>
 </TR>
</c_rt:forEach>
 </TBODY>
 <TFOOT>
  <TR style="text-align:center">
   <TD colspan="2" align="left">Итого:</TD>
   <TD>X</TD>
   <TD>X</TD>
   <TD>X</TD>
   <TD>X</TD>
   <TD>X</TD>
   <TD>X</TD>
   <TD align="right"><%=Totals%></TD>
...
В итоге в ячейках, куда вывожу DoubleVar значение нормальное, а итоговое Totals с кучей девяток в дробной части. И как это получилось?

Иногда удобно некоторые результаты просчитать в JSP, чем это отдавать на откуп БД ли DAO. А вот с этим столкнулся, и теперь в замешательстве
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344047
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovВ JSP существует jsp:usebean - массив объектов c дробными значениями (float или double, суть не меняется), например - 2156.1, 23.11, 45689.8, .... 2345.5. Значения c дробной частью не более двух знаков. Суммирую значения в цикле, показываю. И удивляюсь! Итоговая сумма в дробной части не сходится! Если применяю double-тип, то вообще страшные цифры лезут - 23456.499999.
Это так положено или что-то я не так сделал? Можно ли в JSP проводить вычисления?

Чудеса они для тех кто не знает как десятичные дроби хранятся в double и float.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344277
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЧудеса они для тех кто не знает как десятичные дроби хранятся в double и float.Ребят, вы меня извините, но, я выходец из Си, Кларион, не из таких крутых языков, где совсем не парился насчет точности при работе с такими типами, если конечно, не приходилось вычислять с точностью до 500 знаков после запятой! Но, я уж никак не мог предположить, что Ява 2 знака после запятой сложить не сможет. Или не так?
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344289
Вам же сказали - почитайте как устроены типы флоат дабл в Java - тогда вопросы отпадут, попутно надо будет листануть учебник по информатике - устройство бита-байта и тд. Занятного чтения
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344303
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovРебят, вы меня извините, но, я выходец из Си , Кларион, не из таких крутых языков, где совсем не парился насчет точности при работе с такими типами, если конечно, не приходилось вычислять с точностью до 500 знаков после запятой! Но, я уж никак не мог предположить, что Ява 2 знака после запятой сложить не сможет. Или не так?Могу предположить, что Си Вы изучали самостоятельно, а не в институте, потому что Ваш случай на втором занятии проходят при изучении вещественных типов.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344316
Чорт, на HTML это проходят на 5 занятии, мой кореш Вася был прав - Си круче
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344322
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovРебят, вы меня извините, но, я выходец из Си, Кларион, не из таких крутых языков, где совсем не парился насчет точности при работе с такими типами, если конечно, не приходилось вычислять с точностью до 500 знаков после запятой! Но, я уж никак не мог предположить, что Ява 2 знака после запятой сложить не сможет. Или не так?
Ага, в C++ printf за тебя все округления делает. Был один такой в rsdn.ru:java доказывал что поэтому C++ круче Java.
Лично я с институской скамьи помню. Что:

не все десятичные дроби имеют конечное представление в двоичном виде

Очень простое высказывание очень четко характирезующее проблему.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344333
Сишничек запусти ка такой примерчик
public static void main(String args[]){
double d = 0d;
for(int i=0; i<10;i++){
d+=0.1
}
System.out.println(d);
}
И иди рассказывай что жаба - говно)
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344369
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выходец из HTMLИ иди рассказывай что жаба - говно)А я и не преследовал этих целей. Для себя не такие цели ставлю. Хочу овладеть Ява. И что с этого? То, что я сишник, кларионщик, я богу неугодный? Хочу понять, возможно, неопытный. Сравнил два варианта. В жизни своей программистской не встречал подобных ситуаций. Си я как раз изучал только в универе, курсовые и диплом и остальное. Кларион - это преследователь Си. Не хочу ничего возвышать! Еще раз, в простой ситуации, почему Ява (параллельно у меня куча прог на Clarion выполняют подобные действия) не считает 2 знака после запятой? Для меня даже не это так сильно важно. Для меня важно, как это обойти. Я решаю задачи, а не занимаюсь возвышением и перечислением преимуществ отдельных языков.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344374
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen Popov Выходец из HTMLИ иди рассказывай что жаба - говно)А я и не преследовал этих целей. Для себя не такие цели ставлю. Хочу овладеть Ява. И что с этого? То, что я сишник, кларионщик, я богу неугодный? Хочу понять, возможно, неопытный. Сравнил два варианта. В жизни своей программистской не встречал подобных ситуаций. Си я как раз изучал только в универе, курсовые и диплом и остальное. Кларион - это преследователь Си. Не хочу ничего возвышать! Еще раз, в простой ситуации, почему Ява (параллельно у меня куча прог на Clarion выполняют подобные действия) не считает 2 знака после запятой? Для меня даже не это так сильно важно. Для меня важно, как это обойти. Я решаю задачи, а не занимаюсь возвышением и перечислением преимуществ отдельных языков.
Я ж вам уже написал, что если нужно делать точные вычисления с десятичными дробями используйте тип BigDecimal.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344382
На пальцах - double - 32 бита, в него может влезть всего лишь 2 в 32 степени различных чисел. Всего чисел как вы я думаю можете понять - бесконечное множество - поэтому во ВСЕХ языках программирования имеется всего лишь абстракция дробного числа - поэтому в результате вычислений получается немного не то что мы ожидали иногда. А то что вы на си печатали числа с нужным округлением - то это совсем не значит - что в памяти они представлялись также как и печатались. Решение проблемы - используйте класс BigDecimal
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344384
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkriЯ ж вам уже написал, что если нужно делать точные вычисления с десятичными дробями используйте тип BigDecimal.Спасибо. Но и там Вы сказали, что это не совершенный вариант. Поэтому не так сильно на это обратил внимание. Как всегда, хотел найти некое универсальное решение. Но, наверно, в моем случае это подойдет. Еще раз спасибо.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344413
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выходец из HTMLНа пальцах - double - 32 бита, в него может влезть всего лишь 2 в 32 степени различных чисел. Всего чисел как вы я думаю можете понять - бесконечное множество - поэтому во ВСЕХ языках программирования имеется всего лишь абстракция дробного числа - поэтому в результате вычислений получается немного не то что мы ожидали иногда. А то что вы на си печатали числа с нужным округлением - то это совсем не значит - что в памяти они представлялись также как и печатались. Решение проблемы - используйте класс BigDecimalНе надо мне объяснять, какие типы сколько занимают. Это в книжке не мало написано. Наизусть знаем. Вопрос в другом. Причем тут округлени на Си? Я как раз задавал точное количество знаков после запятой, 2-3 максимум(больше мне не надо было), и получал точный результат. Сомнений не было. Понятно, что реализация дробных чисел разная, но почему 2 знака не устроили? Какие могут быть особенные манипуляции с дробными числами в дробной части, если у языка требуется сложить сотые доли, а он дает неверный результат?
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344421
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
язык даёт верный ответ, это вот Вы даёте ему неверные исходные данные
задавая 0,7 в коде программы, вы реально задаёте число 0.69999999999999996 т.д.
Складывая очень много подобных чисел, Вы получаете уже заметную погрешность

Код: plaintext
1.
----------------------------
 Verba volent, scripta manent 
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344425
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan Blackязык даёт верный ответ, это вот Вы даёте ему неверные исходные данные
задавая 0,7 в коде программы, вы реально задаёте число 0.69999999999999996 т.д.
Складывая очень много подобных чисел, Вы получаете уже заметную погрешностьА я не задаю. Я всего лишь рассчитываю в JSP сумму тех элементов, которую мне вернул DAO. Я ж привел пример. Вы мне расскажите, прежде чем судить, что я не так сделал?
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344437
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen Popov mikkriЯ ж вам уже написал, что если нужно делать точные вычисления с десятичными дробями используйте тип BigDecimal.Спасибо. Но и там Вы сказали, что это не совершенный вариант. Поэтому не так сильно на это обратил внимание. Как всегда, хотел найти некое универсальное решение. Но, наверно, в моем случае это подойдет. Еще раз спасибо.
А вам так сразу совершенный подавать? Еще вариант - использовать вычисления с целыми числами. Т.е. порешите что все деньги, к примеру, у вас в копейках, а дробных копеек вы не поддерживаете.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344441
млйа вот код который вам поможет
public static void main(String args[]){
if(!(readDocumentationJava() && readInformaticBasics()){
killYourselfOnWall();
}else{
continueProgrammingOnClarion();
}
}
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344442
mikkri - кому вы обьясняете - ентому мусчине я бы не только вычисления денег не доверил - стоять рядом с калькулятором запретил бы
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344459
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выходец из HTMLмлйа вот код который вам поможет
public static void main(String args[]){
if(!(readDocumentationJava() && readInformaticBasics()){
killYourselfOnWall();
}else{
continueProgrammingOnClarion();
}
}Еще раз, прежде,чем судить, объясните корректно неучу, что не так сделал? На крутые высказывания и я горазд. Я не выдвигаю свое предположение одним из постулатов. А дело не только в деньгах! Я знаю, что деньги в приложении не так надо хранить. Я хочу понять, почему мое решение неправильное, и хотел бы увидеть решение. А не обсуждать, насколько все такие, язык такой, а остальные - прелесть
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344859
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот решение. Правильно ли это?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
<BODY>
...
<jsp:useBean id="reprslt"  class ="com.pfrkomi.penstransit.domain.SelectResponse" scope="request"/>
<% 
   BigDecimal Totals =  new  BigDecimal( 0 );
    double  DoubleVar= 0 ;
    short  Counter= 0 ;
...
%>
<DIV align="center">
<TABLE cellpadding="1" cellspacing="0">
...
<TBODY>
<c_rt:forEach var="row" items="<%=reprslt.rows%>">
 <%ArrayList row = (ArrayList)pageContext.getAttribute("row"); 
   Counter++; 
   DoubleVar=((Number)row.get("Field")).doubleValue();
   Totals=Totals.add( new  BigDecimal(DoubleVar)); %>
 <TR> 
  <TD align="right"><%=DoubleVar%></TD>
 </TR>
</c_rt:forEach>
 </TBODY>
 <TFOOT>
  <TR style="text-align:center">
   <TD colspan="2" align="left">Итого:</TD>
   <TD>X</TD>
   <TD>X</TD>
   <TD>X</TD>
   <TD>X</TD>
   <TD>X</TD>
   <TD>X</TD>
   <TD align="right"><%=Totals.doubleValue()%></TD>
...
Есть сомнения над тем, что я делаю в цикле. Возможно, это можно еще упростить
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35344999
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настоятельно рекомендую:
1. Прочитать книгу начального уровня про Java
2. Прочитать книгу Брюса Тейта "Горький вкус Java" ("Bitter Java")
3. Посетить сайт http://www.skipy.ru/

По вашему, коду: может он и работает, но там все неправильно. Начиная от именования переменных и заканчивая вычислениями в JSP.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35345043
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самоловских Виталий aka KefirНастоятельно рекомендую:
1. Прочитать книгу начального уровня про Java
2. Прочитать книгу Брюса Тейта "Горький вкус Java" ("Bitter Java")
3. Посетить сайт http://www.skipy.ru/

По вашему, коду: может он и работает, но там все неправильно. Начиная от именования переменных и заканчивая вычислениями в JSP.Спасибо. Почитаем. За то, что хоть не запинали, тоже отдельное спасибо. Не знаю, как насчет остального, но код примера я с головы писал. Возможно, не по сложившимся правилам, синтаксису.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35345111
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovЯ хочу понять, почему мое решение неправильное, и хотел бы увидеть решение. А не обсуждать, насколько все такие, язык такой, а остальные - прелесть
Уже где-то обсуждали. Плавающие типы данных предназначены для научных вычислений. И форма хранения отличается от финансовой. Грубо говоря, при операциях сложения-вычитания вы будете фиксировать некую погрешность, которая возникать в принципе не должна.

Лучше (в порядке приоритета):

1) Использовать финансовые вычисления в базе во внутренних (native) типах и выводить результат с использованием JSP.
2) Использовать наибилее близкие wrappers к тем типам денежных величин (ex oracle.jdbc.NUMBER) и выполнять операции непосредственно с ними.
3) Использовать арифметику целых чисел (переводить денежные типы в копейки) и публиковать соотв. с форматированием дробных разрядов.
4) Прочие варианты. Использование символьных вычислений.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35345259
termit31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор3) Использовать арифметику целых чисел (переводить денежные типы в копейки) и публиковать соотв. с форматированием дробных разрядов.
Реально самый простой и толковый способ для обычных приложений. Советую начать с него.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35345272
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonУже где-то обсуждали. Плавающие типы данных предназначены для научных вычислений. И форма хранения отличается от финансовой. Грубо говоря, при операциях сложения-вычитания вы будете фиксировать некую погрешность, которая возникать в принципе не должна.Это понятно. Мне не понятно, почему эта погрешность проявляется уже в десятых и сотых долях. Для меня не было бы удивлением, если бы я сложил 1.25 с 1.25 и в итоге бы получил 1.500000000000001. Но, вот убеждаюсь, что реализация дробного числа особенная, и это надо учитывать. Да, столкнулся с этим в реализации финансовых операций. Но хотел узнать особенности работы с плавающими типами данными в Ява в общем, чтобы не учитывать эти моменты при решении других задач. Полезную информацию и урок я получил. Спасибо
maytonЛучше (в порядке приоритета):

1) Использовать финансовые вычисления в базе во внутренних (native) типах и выводить результат с использованием JSP.
2) Использовать наибилее близкие wrappers к тем типам денежных величин (ex oracle.jdbc.NUMBER) и выполнять операции непосредственно с ними.
3) Использовать арифметику целых чисел (переводить денежные типы в копейки) и публиковать соотв. с форматированием дробных разрядов.
4) Прочие варианты. Использование символьных вычислений.Огромное спасибо. Уже задумываюсь над третьим вариантом. Его же советовал mikkri. Спасибо ему тоже.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35345577
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) BigDecimal(Double) может давать результаты, отличные от того, что вы ожидаете. Рекомендую использовать только BigDecimal(String), предварительно сконвертировав ваш Double в String. Считайте, что это официальный трюк.

2) Реализация вычислений с дробными числами в Java соответствует стандарту IEEE чего-то там, т.е. неправильными стоит считать языки, где реализация double и float этому стандарту не соответствует. Так что ваше "убеждаюсь, что реализация дробного числа особенная" в корне не верно.

3) Учите мат.часть. Кстати, про денежные вычисления бывает вопросы задают на собеседовании.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35345746
Не понимаю почему вы нормально воспринимаете что результат вычисления может быть 5.00000001, но не может быть 4.9999999999 - разница между этими числами всего 0.00000002
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35345840
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikkri1) BigDecimal(Double) может давать результаты, отличные от того, что вы ожидаете. Рекомендую использовать только BigDecimal(String), предварительно сконвертировав ваш Double в String. Считайте, что это официальный трюк.Спасибо
mikkri2) Реализация вычислений с дробными числами в Java соответствует стандарту IEEE чего-то там, т.е. неправильными стоит считать языки, где реализация double и float этому стандарту не соответствует. Так что ваше "убеждаюсь, что реализация дробного числа особенная" в корне не верно.

3) Учите мат.часть. Кстати, про денежные вычисления бывает вопросы задают на собеседовании.Ничего против не имею
Выходец из HTMLНе понимаю почему вы нормально воспринимаете что результат вычисления может быть 5.00000001, но не может быть 4.9999999999 - разница между этими числами всего 0.00000002Верно. Но я больше хотел сказать о точности после точки. Какая-то минимальная точность должна же существовать? Например, до трех знаков. А тут получаю, что ее совсем нет. Тогда какой смысл в этих вещественных типах?
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35345907
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovВерно. Но я больше хотел сказать о точности после точки. Какая-то минимальная точность должна же существовать? Например, до трех знаков. А тут получаю, что ее совсем нет. Тогда какой смысл в этих вещественных типах?Да, и еще замечу, что куча девяток у меня только с double-типом выходила. Изначально был float. Так там вообще девяток не было. Итоговое число было с двумя разрядами после точки. Ничего в глаза не бросалось, но дробная часть была неверной
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35346000
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovДа, и еще замечу, что куча девяток у меня только с double-типом выходила. Изначально был float. Так там вообще девяток не было. Итоговое число было с двумя разрядами после точки. Ничего в глаза не бросалось, но дробная часть была неверной
Вместо того чтобы разобратся что же такое float и double ты выбрал скользский путь проб и ошибок.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35346101
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВместо того чтобы разобратся что же такое float и double ты выбрал скользский путь проб и ошибок.Да нет. Просто под влиянием сложившейся у меня практики в других языках, ничего не подозревая, писал. Не думал, что вещественные типы данных в разных языках могут отличаться в этом плане. Но, опять же замечаю за собой минус. Надо было досконально изучить вещественные типы Ява. А на ошибках учатся.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35346117
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovНадо было досконально изучить вещественные типы Ява. Вещественные типы почти во всех языках одинаковые (ява не является исключением)
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35346169
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan BlackВещественные типы почти во всех языках одинаковые (ява не является исключением)Но, всё же, один и тот же пример (я имею в виду сумму набора чисел с сотыми долями) даёт разный результат
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35346176
caporegim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА на ошибках учатся.

Блин парень ты извлек неправильные выводы из этого урока.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35346187
Пля..... Вместо того чтобы почитать что же такое реально вещественные типы данных, причем не только в Java, и понять свои ошибки(на все это должно уйти по прогнозам не более 3-х часов) сидит на форуме и не по-детски тупит.....
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35346199
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выходец из HTMLПля..... Вместо того чтобы почитать что же такое реально вещественные типы данных, причем не только в Java, и понять свои ошибки(на все это должно уйти по прогнозам не более 3-х часов) сидит на форуме и не по-детски тупит.....Да не напрягайтесь Вы так! Никаких злых умыслов и намерений я за собой не тяну. Спасибо за общение
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35346213
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35346294
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovНе думал, что вещественные типы данных в разных языках могут отличаться в этом плане.
Блин, ну вот опять о том же. Типы данных не отличаются. Отличается вывод. Java тебя не обманывает и показывает то что есть на самом деле. Другие языки втихаря округляют выводимое значение.
http://www.rsdn.ru/forum/message/2404700.aspx
Для тех кто абсолютно уверен что в cpp радикально отличаются вещественные типы:
http://rsdn.ru/forum/message/943363.aspx
или так
http://img.meta.ua/rsdnsearch/?q=%EF%EE%E3%F0%E5%F8%ED%EE%F1%F2%FC+double&mode=rank&group=N&group=9
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35346846
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovДа нет. Просто под влиянием сложившейся у меня практики в других языках, ничего не подозревая, писал. Не думал, что вещественные типы данных в разных языках могут отличаться в этом плане. Но, опять же замечаю за собой минус. Надо было досконально изучить вещественные типы Ява. А на ошибках учатся.
Могу посоветовать вам кардинально изменить подход к процессу обучения. Поверьте, вам же будет лучше.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35348575
Semen Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСылки по теме
...Спасибо
BlazkowiczБлин, ну вот опять о том же. Типы данных не отличаются. Отличается вывод. Java тебя не обманывает и показывает то что есть на самом деле. Другие языки втихаря округляют выводимое значение.
http://www.rsdn.ru/forum/message/2404700.aspxРебят, я понял, что Java не врет. Но, мне от этого не легче. Целью своего сообщения ставил поиск выхода из таких ситуаций. Возникнут задачи, в которых мне нужно будет работать с вещественными типами (5-7 значащих цифр до дробной точки и 3-5 после) и быть уверенным, что получу точный результат (хотя бы при операциях сложения и вычитания). Получил совет - использовать BigDecimal. Спасибо.
Ну и пусть другие языки округляют - результат-то я получу тот, который мне нужен. Я не понимаю, почему при сложении 2 разрядов после точки округление выполнять - это неправильно. Оно туда напрашивается. Да, вы мне по-доброму напомнили, как хранятся вещественные типы в памяти, да, операции над ними выполняются с погрешностью, но, опять же, мне нужен результат. В примере я складываю и должен получить результат - десятичную дробь не более 6 значащих цифр до точки и 2 после - всего 8 значащих цифр. Не воспринимайте в штыки, что для меня увиденное удивление, потому что у меня есть другие программы (не на Си), где делаю эти операции и получаю ответ, не зависимо от того, что вещественные типы одинаковы. Только что сварганил пример и перепроверил. Никаких округлений при выводе, вывожу как строку (хотя форматы вывода существуют различные). Там использую тип REAL (объявляет 8-байтовую переменную со знаком в формате с плавающей точкой Intel 8087 (двойной точности), 15 значащих цифр), имеется библиотека двоично-десятичных операций и процедур (Binary Coded Decimal (BCD)), которые выполняются таким же образом как операции десятичной арифметики выполняются на бумаге. В этих операция используются промежуточные значения с точностью до 31 значащих цифр с каждой стороны от десятичной точки. Возможно, еще в этом отличие.
BlazkowiczДля тех кто абсолютно уверен что в cpp радикально отличаются вещественные типы:
http://rsdn.ru/forum/message/943363.aspx
или так
http://img.meta.ua/rsdnsearch/?q=%EF%EE%E3%F0%E5%F8%ED%EE%F1%F2%FC+double&mode=rank&group=N&group=9Понятно. Я не настаиваю.
LeonidvМогу посоветовать вам кардинально изменить подход к процессу обучения. Поверьте, вам же будет лучше.Согласен

PS. Ребят, вы мне все доказали. Я не опровергаю ваши утверждения. Не хочу разводить спор. Спасибо
...
Рейтинг: 0 / 0
Чудеса от float и double
    #35349352
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Semen PopovРебят, я понял, что Java не врет. Но, мне от этого не легче. Целью своего сообщения ставил поиск выхода из таких ситуаций. Возникнут задачи, в которых мне нужно будет работать с вещественными типами (5-7 значащих цифр до дробной точки и 3-5 после) и быть уверенным, что получу точный результат (хотя бы при операциях сложения и вычитания). Получил совет - использовать BigDecimal. Спасибо.
Ну и пусть другие языки округляют - результат-то я получу тот, который мне нужен. Я не понимаю, почему при сложении 2 разрядов после точки округление выполнять - это неправильно. Оно туда напрашивается. Да, вы мне по-доброму напомнили, как хранятся вещественные типы в памяти, да, операции над ними выполняются с погрешностью, но, опять же, мне нужен результат. В примере я складываю и должен получить результат - десятичную дробь не более 6 значащих цифр до точки и 2 после - всего 8 значащих цифр. Не воспринимайте в штыки, что для меня увиденное удивление, потому что у меня есть другие программы (не на Си), где делаю эти операции и получаю ответ, не зависимо от того, что вещественные типы одинаковы. Только что сварганил пример и перепроверил. Никаких округлений при выводе, вывожу как строку (хотя форматы вывода существуют различные). Там использую тип REAL (объявляет 8-байтовую переменную со знаком в формате с плавающей точкой Intel 8087 (двойной точности), 15 значащих цифр), имеется библиотека двоично-десятичных операций и процедур (Binary Coded Decimal (BCD)), которые выполняются таким же образом как операции десятичной арифметики выполняются на бумаге. В этих операция используются промежуточные значения с точностью до 31 значащих цифр с каждой стороны от десятичной точки. Возможно, еще в этом отличие.Привет!

прикол в том, что Java разработана с заточкой под защиту от "тупых кодеров".
Переведу на русский: вместо того, чтобы разрешить программисту опасную операцию Java ее запрещает. Это как в С можно обратиться по не инициализированному указателю, но в Java подобное не допустимо.

Так же и в этом варианте Java выдает КАК МОЖНО БОЛЬШЕ ошибок на этапе компиляции и разработки.
к примеру на иных языках программирования на "малых" знаках точности округления может хватать и результат будет совпадать с нужным. Но если вдруг исходные данные превысят предел точности округления, то в ПО пРоявится ошибка. В отличие от этого подхода Java выдает "ошибку" сразу (в том смысле, что не скрывает от программиста свои данные).

Потому с позиции программиста - да, это не удобно и было бы лучше получить округление. Тем более оно пока подходит.
Но с точки зрения менеджера - нужно получить ошибку как можно раньше, ибо стоимость исправления ошибки растет по экспоненте .
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Чудеса от float и double
    #38852697
Gardoneh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Языки программирования для того и придуманы, чтобы программист мог абстрагироваться от физического
чисел. А java вечно заставляет думать о форматах всяких. В общем, своих функций не оправдывает.

Вы вообще представляете, сколько надо сложить чисел двумя разрядами после запятой чтобы получить
переполнение разрядной сетки? 2 в 27-ой степени! Это 1000000000! Миллиард!

А если число хранится в экспотенциальной форме, то его отномительная погрешность не должна преввшать
младшего разряда мантисы!

Если на java пишут финансовые приложения, то я понимаю, почему финансовый коллапс неизбежен.

Могу предположить, что после этого поста меня обвинят в дилетантстве, незнании основ, и прочих смертных грехах.
Потому что ни один из примутствующих здесь java-програмиистов в ответ на вполне естественный вопрос так и не предложил своего решения проблемы (извините, но советы читать докумментацию и использовать BigDecimal я не могу назвать конструктивными). Невооруженным глазом видно, что решения вопроса никто не знает.
...
Рейтинг: 0 / 0
Чудеса от float и double
    #38852701
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полегчало?
...
Рейтинг: 0 / 0
Чудеса от float и double
    #38852709
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GardonehЯзыки программирования для того и придуманы, чтобы программист мог абстрагироваться от физического
чисел. А java вечно заставляет думать о форматах всяких. В общем, своих функций не оправдывает.


Увы, это справедливо для любой реализации ЯП.
Архитектура Фонеймана накладывает ограничения.
А так "Алгоритмический язык" по определению должен реализовывать числовые типы с соответствии с их математическим определением. Но его верной реализации до сих пор нет. :-)
...
Рейтинг: 0 / 0
Чудеса от float и double
    #38852754
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GardonehЕсли на java пишут финансовые приложения, то я понимаю, почему финансовый коллапс неизбежен.

Если на любом ЯП при разработке финансовых приложений используют числа с плавающей точкой- то финансовый коллапс неизбежен.
Числа с фиксированной точкой, очень неудобные для процессора, не просто так придуманы и включены во многие ЯП (Ada вроде первой была), включая java.

То, что некоторые программисты умудряются не знать этого даже к окончанию института- позор нашего образования, не отсеивающего идиотов на младших курсах.
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Чудеса от float и double
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]