Тренажеры HTML Academy (HTML, CSS, JS, React) + Академия + Книга рецептов фронтендера + комьюнити за 99 рублей: boosty.to/how-to-learn-it Какие тренажеры бывают: htmlacademy.ru/courses#fe-start Вливайся в команду мечты: psb-hr@yandex.ru Вакансии: habr.com/ru/company/psb/vacancies/ Мой телеграмм-канал: t.me/howToLearnIT Телеграмм-канал для любителей фронтенда: t.me/frontendnoteschannel Литература: habr.com/ru/post/112953/ kzbin.info/www/bejne/hou1emR_m7inj5I docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html standards.ieee.org/ieee/754/4211/ stackoverflow.com/questions/588004/is-floating-point-math-broken/588014#588014 0:00 Дебют 0:35 Как числа получили стандарт? 2:57 Как хранятся в памяти числа с плавающей точкой? 4:24 Рекламная пауза 5:05 Сколько памяти выделяется на хранение чисел? 9:07 И почему 0.1 + 0.2 != 0.3? 10:25 Это фундаментальный баг? #it #programming
@PlaceTickets Жыл бұрын
Вспомнил анекдот. Приходит мужик к врачу. Выворачивается, подымает ногу, закидывает руку за спину и говорит. "-Доктор когда я так делаю у меня тут хрустит". Доктор отвечает: "-А попробуйте так не делать.". . Тоже самое. Эта проблема известна всем. и ни кто не страдает. Но некоторые единицы людей даже в этом находят трагедию и снимают ролики "Кто сломал языки?".
@UC1C0GDMTjasAdhELHZ6lZNg Жыл бұрын
10-ричная система плохо делится на 3 и такие же проблемы возникают, если бесконечную периодическую дробь попытаться округлить. Это просто ограничение системы счисления или математики кому как угодно.
@jioneg9369 Жыл бұрын
За 12-ричной системой будущее
@yahton309 Жыл бұрын
@@jioneg9369 а как делить на 5?
@jioneg9369 Жыл бұрын
@@yahton309 а как 10 делить на 6?
@yahton309 Жыл бұрын
@@jioneg9369 за 360тиричной*. Ву ней больше всего делителей.
@replays4026 Жыл бұрын
@@yahton309 Лучше сразу в 2310-ой
@mega_mango Жыл бұрын
Кстати. На самом деле и гораздо проще можно. Те же калькуляторы у нас в телефонах хранят числа в памяти также, как их записывают классические математики. У них 5.3 записывается буквально как 53/10 (хотя и не во всех, например в моём телефоне да, а в гугловском калькуляторе или бабушкином телефоне нет). В этом есть плюс в виде отсутствия таких "парадоксов", да и по памяти на практике такие числа занимают гораздо меньше. Однако асимптотическая сложность вычислений таких чисел (именно что сложений) в разы больше (O(n²) вместо O(n), при n = длина каждого складываемого числа, насколько я помню, поправьте меня если что в комментариях если что). Из-за этого по одному месту идут все действительно крупные вычисления, и это в отличие от операций с точкой повсеместно и неисправимо (хотя неисправимо, скорее, почти. Используя некоторые математические формулы, от алгоритма Евклида, до использования обобщённой гипотезы Римана для сверхбыстрого нахождения простых сомножителей и сокращения оных можно ускорить операции с такими числами в разы. Хотя на практике это извращение и я хз кто кроме создателей специальных либ таким занимается)
@konstantinchernyaev3011 Жыл бұрын
Решение: использовать числа с фиксированной запятой. Эти числа хранятся в виде двух целых чисел, одно отвечает за значение, втрое за степень (обычно отрицательную). Из минусов можно выделить только небольшой размер этих чисел
@Ryhor1 Жыл бұрын
Указанного минуса не будет, если положение фиксированной запятой указывается сразу на целый ряд чисел. Например, как тип поля в базе данных. А вообще, если нужна точность, можно всё хранить как дроби двух целых чисел, числитель и знаменатель. После вычислений делать сокращение дробей, чтобы они сильно не разрастались.
@_1_m Жыл бұрын
Вывод: программист хуже пятиклассника
@IT-Svyatoslav Жыл бұрын
Супер! Обожаю ваш канал за глубокие фундаментальные знания и полезные лайфхаки 😊
@МихаилКрамер-н7ш Жыл бұрын
Ну так мы не хуже компьютеров, от числа пи, к примеру, берём, столько, сколько нам уместно для задач брать :) Я, помню, баловался, брал число пи как 3 ровно :)) Надо было сказать, что для точных вычислений есть библиотеки, которые хранят числа в виде строк и реализуют буквально сложение/умножение столбиком
@igor-sukharev Жыл бұрын
Эти неточности при мат. моделировании и расчётах играют малую роль, так как они предсказуемы, как в плане их появления, так и в плане их величины. У интеловского стандарта есть преимущество: для любого числа, малого или большого, хранится одинаковое количество двоичных значащих цифр. А значит, вокруг нуля малые числа находятся плотнее, чем огромные числа. Как от малого, так и от большого числа можно высчитать одну и ту же долю (например, 1%) с одинаковой относительной погрешностью.
@daniil2704 Жыл бұрын
Если нужны точные вычисления, можно умножить на количество знаков после запятой, тем самым получив целое число, что то с ним сделать, а потом поделить обратно :) 0.2 + 0.1 = 0.30000000000000004 (0.2 * 10 + 0.1 * 10) / 10 = 0.3
А почему бы просто не хранить само число в исходном виде как без запятой, + ещё оффсет для этой самой запятой считая со старшего бита, а минусы хранить в старшем бите самого числа?
@demimurych1 Жыл бұрын
Автор видео смешал все в кучу, добавив при этом своими домыслами которые никакого отношения не имеют к JS 00:41:00 *Большая часть скажет так исторически сложилось* Так скажет только та часть, которая училась по видео подобным этому. Любой студент, который учился на инфизе, даже без программирования, прекрасно знает что такое точность вычислений и какие существуют на сегодняшний момент варианты решения этой проблемы. Студенту второго курса инфиза, достаточно открыть спецификацию ИЕЕЕ 754 чтобы пояснить все подводные камни стандарта оперирования чисел с плавающей точкой. 70 тые года, процессор 8087 и перепетии с интел там вообще непричем. Вы бы внимательно почитали те ссылки что сами даете. Там возня была за то, чтобы включить в стандарт дополнительный аппарат расширения точности вычислений в том случае, когда требуемая мантисса будет приводить к очень грубым округлениям. Никакого отношения к тому, о чем говорит автор в видео это не имеет. Прочтите уже сами полностью интервью Кэхана, чтобы не нести всю эту ахинею. А то происходит та же история как с утверждением что typeof null === 'object' это дескать была ошибка. Один не дочитал второй не так понял. Современный JS вам предоставляет BigInt тип, которого более чем достаточно для организации логики вычисления с любой точностью, которую позволит Вам обьем Вашей оперативной памяти. ИЕЕЕ 754 это сдантарт дефакто для работы с числами с плавающей запятой. Он закреплен стандартом, который в том числе описывает все его ограничения. Проблемы студентов начинаются тогда, когда они не зная математики, где проблема точности точно такая же, думают что вычислительные машины могут быть устроены иначе.
@mega_mango Жыл бұрын
Так это просто новичковое видео. Если ты супер профи, то просто смотри соответствующий по сложности контент. Ещё лучше: запиши гайд лучше, чем автор.) А пока эти слова остаются лишь словами
@demimurych1 Жыл бұрын
@@mega_mango > _то просто смотри соответствующий по сложности контент_ Дай мне хотя бы одну ссылку на такой контент о JS? > _Ещё лучше: запиши гайд лучше, чем автор_ Я провел больше 50 стримов общей сложностью больше 100 часов (на youtube канал asforjs). Пытаясь как раз раскрыть эти самые вопросы. Не говоря уже о том, что если бы не война, то полтора года назад, у меня должна была бы выйти книжка.
@dmitry4337 Жыл бұрын
я чомусь був впевнений що побачу коммент Мурича під цим відео ))
@baileysli6235 Жыл бұрын
Мне нравился старый дизайн с героями мультиков :( Сейчас айдентика потерялась и глаз не цепляется в ленте
@ICC_ECHR_Request_BY_VS Жыл бұрын
у вас 10ка... там вроде virtio для якобы безопасности используется, вы можете что нибудь подсказать по этому поводу? а то я смотрел, его патентовали для какого-то хаоса, так же смотрел это шина pci, а сейчас с высокими частотами техника, и покрывают разъемы медью, хотя раньше были из простого металла, да и каждый пятачок на креплениях в меди... А virtio используется в qemu как я понял для подключения к шинам данных тонких-толстых клиентов... и это потом называют какой-то энтропией. 3/10 яблока и немножко энтропии
@IgorAlov Жыл бұрын
Это зависит от типа данных)
@VladVeninTV Жыл бұрын
Привет, почему ты удалил свои видео с к другого канала? 🧐
@it2138 Жыл бұрын
Возвращаюсь на старый канал просто) Эксперимент с новым каналом оказался не очень удачным
@samolevich Жыл бұрын
Если проблема не из-за стандарта, то для чего историческая справка про борьбу стандартов?
@alexandrstrekalovskiy4083 Жыл бұрын
Ты прекрасен! Лучшее объяснение, которое я когда-либо видел! Спасибо! Вот ток фраза в конце "из-за неточности математики" вгоняет в ступор... Качество шоу - супер!❤
в js используется 53 бита на число, если мы не говорим про оптимизации
@shamilmammadov8246 Жыл бұрын
Так как там и флоат и инт.
@snatvb Жыл бұрын
@@shamilmammadov8246 не, инты там есть при оптимизациях, когда ты маленькие числа юзаешь, оно под капотом может быть int8, int16
@НаташаНаташа-б8к Жыл бұрын
а в vax стандарте была такая проблема ?)
@gernet9250 Жыл бұрын
Errortime??? Голос очень похож...
@just_old_memories Жыл бұрын
Вроде видос недавно вышел, но нода 14 версии... К'мон на дворе 23 год и нода 19 актуалОчка. Хотя от этого ничего не изменится в контексте этой темы, но боже, хотя бы ради эстетического удовольствия! А так тема довольно понятно разжёвано и это заслуживает как минимум лайка👍
@it2138 Жыл бұрын
Спасиба! =) У нас на проектах нода не так быстро обновляется
@almazkaliyev Жыл бұрын
Можно потом неожиданные баги словить при выкате в продакшн с версией, сильнее старее локальной)
@Aaron_Grella Жыл бұрын
@@almazkaliyev+++ Вот Openssl кривое обновление было, сломало многим Arch Linux (т.к это Rolling Release), надеюсь дало урок тем, кто не любит старые версии, но актуальные, стабильные).
@MityaNamikin Жыл бұрын
а чем 1,010(1001)×10¹⁰ лучше 110101/1010¹?
@drino955jug3 Жыл бұрын
йосип хорват? Ты не из Хорватии случаем?
@MityaNamikin Жыл бұрын
@@drino955jug3 кто? я не из Хорватии
@drino955jug3 Жыл бұрын
@@MityaNamikin ты ник поменял или он у тебя такой и был MeeThya (Митя)? Просто у меня походу какой-то баг с ютубом был
@MityaNamikin Жыл бұрын
@@drino955jug3 я был и есть Митя)
@drino955jug3 Жыл бұрын
@@MityaNamikin я тоже Митя кста. Ля, вот это баг.................
@bornumental146 Жыл бұрын
Дежавю какое-то, будто смотрел уже это видео.
@frkammm1214 Жыл бұрын
Судя по всему его удалили по какой-то причине и снова выложили
@it2138 Жыл бұрын
Даа, это перезалив с другого канала
@kollpotato Жыл бұрын
Lua вошла в чат
@daniil2704 Жыл бұрын
Ну не в любом) Lua выдаст 0.3 :) Хер знает как, но выдаёт
@gign_141 Жыл бұрын
Верните Боба и другие мультики.
@jarjarbinks6015 Жыл бұрын
госпади, бедные джээсеры :( подарите им decimal
@demimurych1 Жыл бұрын
У JS серов для этого есть bigInt. Который может делать все тоже самое что и decimal при этом имея ограничения по точности рывные доступному обьему оперативной памяти. В отличии от языков где decimal есть а big инт так и не завезли.
@Orange_homunkulus31 Жыл бұрын
@@demimurych1Ну и сколько памяти в итоге съедает этот BigInt?
@demimurych1 Жыл бұрын
@@Orange_homunkulus31 Зависит от того, какого обьема BigInt Вы собираетесь использовать. В варианте: var theBig = BigInt(1); Обьем издержек будет ровно таким же как обычное число с плавающей точкой. Естественно чем больше BigInt Вы будете использовать тем больше будут издержки. Что совершенно логично.
@crypto_has_you Жыл бұрын
Тебе что руки приклеили к столу?
@AlexandrHryciv7 ай бұрын
Бла бла бла.
@Mioxiomio Жыл бұрын
666 лайков
@mrmsaid7617 Жыл бұрын
фейк, C++ показывает 0.1 + 0.2 = 0.3
@bymclnet Жыл бұрын
10.8 - (10.7 + 0.1) = 1.77636e-15 (в С++) 10.8 - 10.7 = 0.100000000000001 (в Python и некоторых других)
@mrmsaid7617 Жыл бұрын
@@bymclnet python это понятно, но в спп это один из редких и уникальных случаев, а так в основном нет проблем
@SalatikInMyHead5 ай бұрын
Единственное что он показывает, это что кто-то манипуляторы потока не освоил 🤓 precision выставь побольше и наслаждайся 👍
@PlaceTickets Жыл бұрын
Бред. Этот баян уже сто раз рвали ютюберы-блогеры. Дизлайк. Выложи пример на онлайн редактор, с доказательством.
@it2138 Жыл бұрын
Доказательство чего?)
@PlaceTickets Жыл бұрын
@@it2138 того что 0.1+0.2 = 0.3000004
@АртурГойко-т8я Жыл бұрын
@@PlaceTickets нжми f12 открой консоль и проверь
@Egor-yr4qz Жыл бұрын
@@PlaceTickets В браузере на любом сайте нажми кнопку f12, откроется консоль браузера, она же и компилятор JS (считай онлаин редактор). В консоле запиши 0.1+0.2
@gign_141 Жыл бұрын
Открой консоль Chrome и там пропиши. Ответ тебя удивит, чел...