Тест: 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

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

Тест: 1+2 Задача, Javascript, Юмор, IT юмор, Программирование

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

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

Об авторе

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

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

### Конец ###

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

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

2K постов11.8K подписчиков

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

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

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

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

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

Доменное имя настолько сильное, что аж страшно заходить ;-)

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

В дополнение:

Поставил тут калькулятор на JS для тестирования просмотра указанных эффектов:

https://wpvi.ru/pages/story/00019/

Там же короткое видео, демонстрирующие некоторые результаты.

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 в двоичном виде, после чего сложить их и перевести полученный результат обратно в десятичную систему счисления и получить ответ на свой вопрос. За такой пост я даже обязуюсь поставить плюсик.

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

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

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

Контента сайта толком и нет, зато рекламы на нем уже больше, чем на пикабу. Прикольно

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

Почти 2 тысячи страниц, в том числе -

Курс 1 HTML.

Курс 1 CSS.

Первые шаги в освоении Visual Studio Code.

Курс для новичков: "Intro to Vue 3" ("Введение в Vue 3").

Cmd.exe. Командная Строка. Самые нужные команды для дистанционной работы.

Ворд. Универсальный редактор текстов. Курс от новичка до профи за час.

Эксель. Электронная таблица. Курс от новичка до профи за час.

Шахматы, учебник шахматной игры для новичков. От полного нуля до игрока с теорией и практикой за час.


И т.д.


И все бесплатно, без СМС, без регистрации.

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

ага, 1+2 нельзя сказать чему равно, не всё так однозначно.

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

Типа того ;-) Есть нюансы.

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

...  а выбрал падишах ту, у которой самые большие сиськи...

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

Не согласен. Задница!

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

1+2=3

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

Значит перед вами прежде всего адектватный человек. А примечательный он или нет судить следует не по тупому вопросу, а по другим критериям

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

Согласен. Но вообще-то это была ирония.

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

[математик-теоретик, работающий в троичной системе счисления]

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

Тут немного не так. Теоретику-математику, работающему в двоичной системе, приснилась двойка. ;-)

23
Автор поста оценил этот комментарий
Падажи. Почему сразу js? Это проблема представления чисел в памяти компьютера, а не языка программирования. То же самое можно повторить на многих (если не всех) языках.
раскрыть ветку (1)
Автор поста оценил этот комментарий

*То же самое можно повторить на многих (если не всех) языках.

Вот опровержение, пробую на php на ЭТОМ же компе -

D:\>

D:\>php -r echo((0.1+0.2)*10);

3

D:\>

Что на это скажите?


В чем принципиальная разница между JS и PHP - ?

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

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

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

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

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

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

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

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

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

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

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

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

7
Автор поста оценил этот комментарий
Я как-то боролась с этим эффектом на сях. А вот макросы не трогала.
раскрыть ветку (1)
Автор поста оценил этот комментарий

Понял, будет время попробую на макросах. Спасибо за информацию, до этого я думал, что это чисто особенность JS.

показать ответы
23
Автор поста оценил этот комментарий
Падажи. Почему сразу js? Это проблема представления чисел в памяти компьютера, а не языка программирования. То же самое можно повторить на многих (если не всех) языках.
раскрыть ветку (1)
Автор поста оценил этот комментарий

JS всегда и везде под рукой. А Вы действительно можете продемонстрировать этот же эффект, например, в макросах Ворда или Экселя?

показать ответы