Округление чисел в Java: погрешности и их причины

Перейти в телеграм, чтобы получить результаты теста
Пройдите тест, узнайте какой профессии подходите
Вам подходит профессия:
Аналитик данных
Основные характеристики профессии:
не нужно общаться с людьми
логика
анализ
поиск закономерностей
работа с числами
Построим личный план перехода в профессию для вас бесплатно
- убедитесь, подходит вам профессия или нет
- получите оценку своих навыков и шансов освоить профессию
- забронируем за вами скидку 55% на обучение, пока думаете
Позвоним вам в течение часа — не пропустите звонок
Чем занимается специалист
Специалист создает все онлайн-продукты, программы, приложения, игры и сайты, которыми вы пользуетесь каждый день.
Создает — значит описывает последовательность действий на специальном языке программирования. Настраивает действия, что должно произойти, если пользователь нажмет на кнопку.
Средняя зарплата начинающего специалиста в первый год работы:
от 50 000 ₽
Что надо знать и уметь, чтобы выучиться на аналитика:
- базовое школьное образование
- уверенные навыки работы с компьютером
- опыт выполнения задач в конкретные сроки
Глубокие знания математики или английского не нужны
Почему мы рекомендуем вам эту профессию
Ваш скрытый талант:
наблюдательность
Бывают случаи, когда программа, написанная на Java, не ведёт себя так, как ожидается. Особенно это заметно при работе с числами с плавающей точкой. Примером
Бывают случаи, когда программа, написанная на Java, не ведёт себя так, как ожидается. Особенно это заметно при работе с числами с плавающей точкой. Примером может быть использование метода Math.round()
, который округляет число с плавающей точкой до ближайшего целого.
Следующий пример демонстрирует типичную проблему:
double a = 0.5;
double b = 0.49999999999999994;
System.out.println(Math.round(a)); // 1
System.out.println(Math.round(b)); // 1
В этом примере оба числа округляются до 1, хотя второе число меньше 0.5 и интуитивно кажется, что оно должно было округлиться до 0.
Это происходит из-за погрешности при хранении чисел с плавающей точкой. В компьютерах числа с плавающей точкой хранятся в двоичной форме и не все десятичные дроби могут быть точно представлены в этом формате.
Когда мы задаём число 0.49999999999999994
, оно не хранится точно таким. Вместо этого, хранится наиболее близкое к нему число, которое может быть представлено в двоичной форме, и это число на самом деле чуть больше 0.5
. Поэтому, когда оно округляется с помощью Math.round()
, результатом становится 1
.
Подобные погрешности связаны с природой чисел с плавающей точкой и их представления в компьютерах. Это важно учитывать при работе с такими числами и планировании алгоритмов, которые на них основаны.
Добавить комментарий