Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java Мобильная разработка (Android)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2012, 21:48   #1
Dmitriy.G
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 26
По умолчанию Странная арифметика Java

Здравствуйте.
Кто подскажет в чем дело, выполняю обычный пример (-3.4)+3, а ответ получаю совершенно необычный -0.4000001, и такой результат при сложении других чисел (-1.1+1 = -0.1000001; -2.7+2 = -0.7000001 и т.д.). С чем это может быть связано? В качестве типов данных пробовал использовать и float и double.
Dmitriy.G вне форума Ответить с цитированием
Старый 05.03.2012, 19:52   #2
Kvest
 
Регистрация: 28.01.2008
Сообщений: 3
По умолчанию

Добрый день!
Это не странная арифметика явы, а изъян чисел с плавающей точкой. Он есть во всех языках. У этих чисел после запятой может возникать милионные...миллиардные, которых вы на самом деле не присваивали. Из-за этого переменные данного типа нельзя просто сравнивать на равенство, их надо сравнивать с погрешностью.
Kvest вне форума Ответить с цитированием
Старый 06.03.2012, 09:05   #3
AMDemon
Пользователь
 
Регистрация: 14.11.2011
Сообщений: 15
По умолчанию

Это связано с тем, что вычисления производятся в двоичной системе. Любая электронная вычислительная система из-за этого считает с погрешностью, это необходимо учитывать. В твоём случае достаточно просто округлить.
Можешь ради интереса разделить 1.0 на 1.0, тоже погрешность должна вырисовываться.
AMDemon вне форума Ответить с цитированием
Старый 06.03.2012, 22:15   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Проблема не в двоичной системе, а в представлении вещественных чисел. Они намеренно представлены с погрешностью в уплату за большие минимальное и максимальное значение при малых затратах памяти.
http://ru.wikipedia.org/wiki/Числа_с_плавающей_запятой
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
странная ошибка Психвоплоти Помощь студентам 0 23.02.2011 15:01
Странная ошибка STIFFmaster_LP Помощь студентам 2 06.11.2009 19:11
Странная задача. GonZaleZ Общие вопросы C/C++ 6 19.09.2009 21:56
Странная загрузка Лубышев Операционные системы общие вопросы 9 17.03.2008 09:24
Странная реакция drknn Помощь студентам 2 02.09.2007 15:51