Тест: 1+2

Серия Простые смешные задачки на сообразительность

Как много можно узнать о человеке, задав ему простой вопрос:

1+2=?

В большинстве случаев ответ будет обычным:

1+2=3

Значит, мы имеем дело с обычным, ничем не примечательным человеком.

Если последует ответ:

1+2=4

Значит, перед нами невнимательный торопыжка, привыкший к стандартному 2+2.

Вот такой вариант:

1+2=12

Скажет нам о том, что перед нами человек, которому ближе строки-слова, чем числа.

Хотя, точнее было бы:

'1'+'2'='12'

Если будет ответ:

1+2=10

Значит, перед нами математик-теоретик, работающий в троичной системе счисления.

Но, чу! А это кто к нам пришел лысый, но с бородкой, прячущий за очками хитрые глаза? Он нам дал такой неожиданный ответ:

1+2=3.0000000000000004

Ага, попался! Вот он-то нам и нужен, специалист по JS (JavaScript, ЯваСкрипт, ДжаваСкрипт) с специфическим чувством юмора.

Строго говоря, ответ неверный, даже в JS все-таки 1+2=3 в большинстве случаев, когда работаем с целыми числами. Но бывают и вот такие вариации:

(0.1+0.2)*10=3.0000000000000004

Такой вот фото факт.

Свежий фотофакт, только что пробовал.

Свежий фотофакт, только что пробовал.

За это мы и любим JS, за необычное специфическое чувство юмора, которое снесло крыши у многих неустойчивых к стрессам программистов.

Об авторе

Адрес моего творческого некоммерческого сайта: https://wpvi.ru/

#############

### Конец ###

#############

Лига программистов

2.3K постов12K подписчика

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Вы смотрите срез комментариев. Показать все
0
DELETED
Автор поста оценил этот комментарий

А на основе чего получается 3.0000000000000004?

Откуда берется 4?

Есть какое-то логическое объяснение?

раскрыть ветку (8)
5
Автор поста оценил этот комментарий
IEEE 754, стандарт на представление чисел с плавающей точкой. Если коротко, некоторые числа нельзя представить в виде сумм степеней двойки
раскрыть ветку (6)
Автор поста оценил этот комментарий

Такое объяснение порождает новые вопросы. Почему именно 3.0000000000000004, а не например 3.0000000000000003 - ? Почему вообще не просто 3.0000000000000000 - ? Откуда эта странная цифра в конце?

раскрыть ветку (5)
7
Автор поста оценил этот комментарий

Давайте попробуем представить 0.1 в двоичной системе счисления.

0.1 (2) = 0 + 1 * 2^-1 = 0 + 1/2 = 0.5 (10) - много
0.01 (2) = 0 + 0 * 2^-1 + 1 * 2^-2 = 1/4 = 0.25 (10) - много
0.001 (2) = 0.125 (10) - почти, но многовато
0.0001 (2) = 0.0625 (10) - мало
0.00011 (2) = 0.0625 + 0.03125 = 0.09375 (10) - достаточно близко, но все же маловато
0.000111 (2) = 0.0625 + 0.03125 + 0,015625 = 0.109375 (10) - снова близко, и опять как будто бы не совсем оно

Думаю проблема очевидна. Чем больше знаков после запятой (по сути - битов) мы используем, тем ближе мы приближаемся к нужному нам числу, но никогда его не достигнем. Поскольку у переменной есть конечный размер в байтах, то и точность записи числа - ограничена.

Когда мы записываем в переменную 0.3, под капотом туда записывается оооочень близкое к этому число. Поскольку дробные числа мы хотим видеть с достаточно небольшим количеством знаков после запятой, то значение просто округляется.

Судя по примеру "0.1 + 0.2 = 0.30000000000000004", в машинном представлении числа 0.1 и 0.2 записаны как чуть-чуть большие числа. По отдельности погрешности ничтожны, но при сложении погрешность начинает становиться заметной.

Если вам интересно, можете выяснить точную запись чисел 0.1 и 0.2 в двоичном виде, после чего сложить их и перевести полученный результат обратно в десятичную систему счисления и получить ответ на свой вопрос. За такой пост я даже обязуюсь поставить плюсик.

раскрыть ветку (2)
Автор поста оценил этот комментарий

Ну Вы и садист, батенька! За такую адскую работу всего один плюсик!

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Это на уроках школьной информатики проходят, по крайней мере 15 лет назад, сейчас что совсем пизда школьному образованию?
1
Автор поста оценил этот комментарий

Квантовая неопределённость.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да уж, похоже на то.

Автор поста оценил этот комментарий

Да, эти объяснения я читал, но честно говоря, не понял.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества