- 18
- 33 078
Светлый код
Russia
เข้าร่วมเมื่อ 1 ก.ย. 2020
Привет, я Артём Караваев.
Математик-программист, участник и призёр международных соревнований, разработчик математических библиотек для научных расчётов.
А это мой канал «Светлый код»
Со мной в этом комьюнити ты перестанешь бояться математику в программировании.
В результате твой код станет «светлым»: простым, точным, быстрым, надёжным. И он будет работать не по воле бубна, а в силу математической безупречности.
Математик-программист, участник и призёр международных соревнований, разработчик математических библиотек для научных расчётов.
А это мой канал «Светлый код»
Со мной в этом комьюнити ты перестанешь бояться математику в программировании.
В результате твой код станет «светлым»: простым, точным, быстрым, надёжным. И он будет работать не по воле бубна, а в силу математической безупречности.
Это база! :: S00E03 — Арифметический сдвиг и расширение типа данных
Как работает арифметически сдвиг влево и вправо с положительными и отрицательными числами в дополнительном коде. Здесь же мы рассказываем о расширении типа данных: как байт превращается в слово, двойное слово, учетверённое, и в обратную сторону.
ТГ: t.me/zealcomputing_rus
ТГ: t.me/zealcomputing_rus
มุมมอง: 228
วีดีโอ
Это база! :: S00E02 - Как закодированы целые отрицательные числа?
มุมมอง 133ปีที่แล้ว
X (-X)=256 На этой хитрой формуле основано понятие «дополнительный код». Это способ кодирования целых отрицательных чисел так, чтобы для процессора и сложение, и вычитание выглядели одинаково. Об основном принципе кодирования отрицательных чисел и преимуществах именно этого способа я рассказываю в очередной серии нашего сериала «Это база!». Приятного просмотра. ТГ: t.me/zealcomputing_rus ВК: vk...
Это база! :: S00E01 - Как складывать двоичные числа и почему происходит переполнение?
มุมมอง 408ปีที่แล้ว
Ты в курсе что 255 1=0? Я сам в шоке, бро, но это правда. Ещë более жестокая правда в том, что 300 104=48. Если у тебя разрядность восемь бит, жизнь становится похожей на «Дум», графика которого как раз была восьмибитной. Хотя в те годы игра ощущалась очень круто! Чтобы не застрять в той эпохе, и быть крутым современным программистом, нужно понимать почему компьютерная арифметика работает именн...
Это база! :: S00E00 - Как устроен двоичный код для натуральных чисел
มุมมอง 277ปีที่แล้ว
Как программисту лучше представлять двоичный код и способ перевода туда и обратно. Этим видео я открываю сериал "Это база!" для самых-самых начинающих.
Следующая итерация
มุมมอง 101ปีที่แล้ว
✦ Канал в ТГ: t.me/zealcomputing_rus ✦ Группа ВК: zealcomputing
Учебный курс по IEEE-754 :: S01E06 :: Округление и общая схема перевода десятичного числа в двоичное
มุมมอง 1.3K2 ปีที่แล้ว
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Следующий здесь: th-cam.com/video/AziHENG2yeQ/w-d-xo.html Знакомимся с округлением. Оно не так очевидно, как в привычной математике. Вы узнаете то, что трудно увидеть в простейших примерах, приводимых другими видео-преподавателями. А именно: перевести число из десятичной системы счисления в формат IEEE-754 бывает иногда трудно настольк...
Учебный курс по IEEE-754 :: S01E08 :: Неожиданные эффекты, практич. рекомендации по использованию
มุมมอง 4572 ปีที่แล้ว
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Это последний урок первой части курса. Практические рекомендации по применению арифметики с плавающей запятой. Некоторые уже описанные особенности и новые моменты: потеря коммутативности, ассоциативности, неожиданные проявления так называемой «невозмутимости». И самый важный совет! Этот совет поможет вам избежать почти 100% всех ошибок...
Учебный курс по IEEE-754 :: S01E07 :: Форматы binary32 и binary64 Стандарта IEEE-754
มุมมอง 8132 ปีที่แล้ว
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Следующий здесь: th-cam.com/video/LanLYZ2NMhM/w-d-xo.html Здесь вы полностью овладеваете форматами binary32 и binary64 (float и double), показываю как можно на C выводить битовое представление чисел (на других языках тоже можно, но не на всех, там я отсылаю вас к гуглу или яндексу и показываю как это просто, например, отыскать решение ...
Учебный курс по IEEE-754 :: S01E05 :: Числа с плавающей запятой в двоичном формате
มุมมอง 2.1K2 ปีที่แล้ว
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Следующий здесь: th-cam.com/video/55zQu00VrxM/w-d-xo.html Впервые переходим к двоичной системе счисления. Строим красивую и простую модель числа с плавающей запятой на основе 6 битов, предельно близкую к формату IEEE-754. Это самый важный и самый сложный урок. Предыдущие четыре урока были призваны показать откуда в арифметике с плавающ...
Наиболее точное скалярное произведение векторов типа double. Вычисление значения полинома
มุมมอง 9063 ปีที่แล้ว
Видео-версия нашей статьи на Хабре (habr.com/ru/post/529476/). Предыдущая презентация даёт представление о сложении массива чисел, и от скалярного произведения нас отделяет только неумение перемножать два числа без потери точности. Выполнив это двумя способами (с FMA и без неё), мы получаем широкий простор для реализации любых алгоритмов, основанных на умножении и сложении чисел с плавающей зап...
Учебный курс по IEEE-754 :: S01E04 :: Специальные числа
มุมมอง 1.3K4 ปีที่แล้ว
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Следующий здесь: th-cam.com/video/RhHaRMPyttc/w-d-xo.html Откуда берутся специальные числа (бесконечность и NaN), зачем нужны. Появление знака у числа 0. Зачем? ✦ Сообщество ТГ: t.me/zealcomputing_rus ✦ Сообщество ВК: zealcomputing
Можно ли сложить N чисел типа double наиболее точно?
มุมมอง 1.3K4 ปีที่แล้ว
Видео-версия нашей статьи на Хабре (habr.com/ru/post/525090/). 12:40 Результаты тестирования Дело в том, что абсолютно точно сложить N чисел типа double (binary64 в IEEE-754) с сохранением суммы в типе double не получится в силу самой специфики формата с плавающей запятой. Если мы возьмём арифметику с плавающей запятой с бесконечной точностью (или даже воспользуемся рациональными числами), то п...
Учебный курс по IEEE-754 :: S01E03 :: Диапазон возможных значений, 3 подводных камня с ним связанных
มุมมอง 1.7K4 ปีที่แล้ว
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Следующий здесь: th-cam.com/video/AiIPt5925sE/w-d-xo.html В третьем уроке речь идёт о том, как правильно определяется диапазон чисел с плавающей запятой на примере нашей искусственной десятичной системы. При этом показано, почему числа из получаемого диапазона распределены НЕравномерно. Далее показано какие это порождает недостатки, ко...
Учебный курс по IEEE-754 :: S01E02 :: Простейшая десятичная система с плавающей запятой
มุมมอง 2.3K4 ปีที่แล้ว
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Следующий здесь: th-cam.com/video/oCnsKDz6P94/w-d-xo.html Во втором уроке рассказ идёт о том как возникает плавающая запятая и какие проблемы будут у наивного подхода к созданию простейшей модели (на примере десятичных чисел, чтобы было легче воспринимать). Как устранение этих недостатков приводит к некоторым фундаментальным положениям...
Сложение двух чисел с плавающей запятой без потери точности
มุมมอง 12K4 ปีที่แล้ว
Презентация для статьи на Хабре (habr.com/ru/articles/523654/). Речь идёт о том, как можно сложить два числа с плавающей запятой так, чтобы не потерять точность. Рассматривается два алгоритма. Продолжение темы здесь: th-cam.com/video/qi193h_dsyg/w-d-xo.html Список упомянутых в презентации источников: [1] Jean-Michel Muller, “Handbook of floating-point arithmetic”, 2018. [2] Jonathan Richard She...
Table-Maker's Dilemma: почему почти все трансцендентные элементарные функции округляются неправильно
มุมมอง 1K4 ปีที่แล้ว
Table-Maker's Dilemma: почему почти все трансцендентные элементарные функции округляются неправильно
Учебный курс по IEEE-754 :: S01E01 :: Введение
มุมมอง 4.7K4 ปีที่แล้ว
Учебный курс по IEEE-754 :: S01E01 :: Введение
1:15 да, это прямой код и здесь все те же проблемы, которые возникают у школьников при сложении/вычитание с отрицательными числами 🙂 А схему вы классную нарисовали! Хотя, на самом деле, там всего лишь 2 правила: a + b =... 1) если знаки чисел одинаковые (проверяем старшие биты слагаемых, sign(a) == sign(b), или, что то же, sign(a) XOR sign(b)), то результат равен сумме модулей со знаком слагаемых: -a+(-b) = -(a+b) +a+(+b) = +(a+b) 2) если знаки разные, то сравниваем модули слагаемых, находим большее из слагаемых. Знак результата равен знаку числа с большим модулем. Модуль результата равен разности модулей. |a| > |b| : -a+b = -(a-b) a+(-b) = +(a-b) |a| < |b| : -a+b = +(b-a) a+(-b) = -(b-a)
Нет, неправда. 255+1 не равен 0. Результат равен 0 и флаг переполнения, который говорит о том что на этот 0 можно вообще не смотреть, потому что это неправильный результат выполнения операции, потому что мы вышли за границу разрядной сетки. И уже программисту решать как обработать эту ситуацию - игнорировать и соглашаться на сложение по модулю 256. Или же останавливать вычисления потому что произошла ошибка. Нормальный ЯП в случае переполнения должен выбросить эксепшен а не замолчать такую ситуацию. В подобных обучающих видео как раз важно подчёркивать что "двоичный код" ≠ "число в двоичной СС". 304 это как раз число в двоичной СС, а в двоичном коде это 48 и бит переполнения. И раз уж зашла речь о определениях, бит - это тоже понятие, которое относится к двоичному коду, не просто к записи числа в 2-ичной СС. В 2-ичной СС нет битов, там двоичные разряды.
0:50 + 3:19 Здесь ошибка. Число в двоичной системе ("двоичное представление числа") и двоичный код это НЕ одно и то же. Десятичное число 5 в двоичной системе счисления это 101, -5 это -101, 5.5 это 101.1 А вот двоичный код это представление чисел в компьютере (калькуляторе и пр). Первый вопрос на который при этом нужно ответить это разрядность для чисел. Если 8 разрядов, то двоичный код для нашего числа 5 это 0000 0101. Да, вот с этими лидирующими нулями. Если нужно представление для отрицательных чисел то это ещё один вопрос - как минимум нужно подумать о том как представлять знак, значит, нужен знаковый бит. Дальше, нужно договориться о том как кодировать отрицательные числа. И тут есть варианты. Скажем, двоичный код для -5 с использованием прямого коде это 1000 0101, а в дополнительном коде - 1111 1011. С представлением дробных чисел там ещё свои заморочки, будем ли мы хранить строго ограниченное количество разрядов после запятой, или позволим ему быть произвольным (в определённом диапазоне). Так что нет, "двоичное представление числа" и "двоичный код" это далеко не синонимы. Число в двоичной СС это понятие из области математики. Двоичный код - из информатики, схемотехники и пр.
Годно! Быстро и по делу
Прекрасный канал, доходчиво. Было бы интересно увидеть разбор принципов работы таких трюков, как быстрый обратный корень.
Не покидают мою голову мысли о троичном компьютере. Как хранить троичные целые числа плюс минус понятно. Но вот как там хранятся float - как то умом не постигается. Сравнение числе в формате двоичного флоат действительно простая операция, но сравнение чисел троичного флота на мой взгляд - не получится сделать столь же простым способом.
Округлить, да и все
интересное упражнение 2. решил порешать и мой ответ не совсем совпал с Вашим. я рассуждал следующим образом: поскольку вопрос ставится о практическом смысле, то в изначальном числе 10 значащих двоичных цифр и все они верны, тогда, если я верно помню правило округления, оно могло быть получено округлением чисел с 11 значащими цифрами: 101,01101100 (в 10-ой системе это 5,421875) -> 101,0110110 (данное в условии) или 101,01101011 (в 10-ой системе это 5,41796875) -> 101,0110110 (данное в условии) если считать погрешность за половину единицы последней верной цифры исходного числа (7 разряд после запятой), то получаем 2^-7 / 2 = 2^-8 = 0,00390625 отсюда делаю вывод, что будут верны лишь 3 цифры. то есть, ответ 5,42. При этом у Вас на слайде тоже написано "хватает 3 цифр", а в правильном ответе указаны 4 цифры, хотя из погрешности 4-ой цифре доверять нельзя. Также, если округлить до 3-х значащих цифр предыдущее, исходное и следующее с Вашего слайда выходит соответственно: 5,41; 5,42; 5.43 и всё вполне однозначно кодируется, если это имелось ввиду в вопросе.
Спасибо за ваши рассуждения. Я оговорился, имелись в виду 3 десятичные цифры ПОСЛЕ запятой. Но в целом, если операция округления точно определена, то и двух достаточно. Я согласен.
Спасибо большое тем кто придумал эту срань господню с точностью, у программистов и у меня теперь из-за этого код нормально не работает, ибо 0.3 уже не 0.3, а 0.29999999999997...
Перевод в конверторах дает немножко другой результат для примера на 9:30 Во всех конверторах 0x1B = 3.783506E-44, а на видео 3.7200759...E-44. Разница существенная
На видео всё правильно. После округления, когда получил 0x1B, результат естественно будет отличаться от точного. И да, разница будет существенной.
Позвольте не согласиться насчет Posit. Может в мат. анализе он и бесполезен, но в сфере машинного обучения (и еще в ряде других сфер) он более чем дает фору float point
Позволяю не согласиться, но прошу равноценный симметричный ответ: ваш учебный курс, где изложена концепция позитов и причина, по которой они реально дают фору как универсальный инструмент, а не в специальных редко выпадающих случаях.
Планируется ли такой же курс по Posit (unum 3)? Было бы очень хорошо, потому что дельного материала по posit очень мало
Спасибо за вопрос. Нет, не планирую.
Братишка, удивлен качеством подачи материала и видео для 4-ех сот подписчиков. Спасибо!
Спасибо, рад стараться!
Спасибо, Артем! Действительно, эту тему в ВУЗе проходят довольно поверхностно, и многие, так называемые, программисты, даже вообще не знают это)) Скажите, а вы будете дальше продолжать свой курс?
Здравствуй. Буду, только платно и не очень скоро.
Надо же, на 43 годике я узнал, что такое 9.99e34 на калькуляторе 😂 Оказывается, это то же, что 9,99 х 10^34. Делов-то! Прям почувствовал, как ушла боль, которая возникла при виде чего-то вроде 6,7e12 👍
Радуюсь за вас!
Зашел в комментарии и обрадовался, что тут нет уничижения автора видео)
Скажите пожалуйста, будет ли продолжение?
Будет, да, сегодня.
Обалдеть, а можно пару примеров почему posit не подходит для мат анализа?
Эти примеры не для новичков, поэтому где-нибудь в другой раз.
18:40 критерием истины является практика. Правильность гносеологическое понятие, субъективно.
Спасибо! Теперь понятно про переполнение. Отличная подача материала!🙂
Отличная серия! Автору огромное спасибо и успехов!
Благодарю :)
Ты в курсе что 255+1=0? Я сам в шоке, бро, но это правда. Ещë более жестокая правда в том, что 300+104=48. Если у тебя разрядность восемь бит, жизнь становится похожей на «Дум», графика которого как раз была восьмибитной. Хотя в те годы игра ощущалась очень круто! Чтобы не застрять в той эпохе, и быть крутым современным программистом, нужно понимать почему компьютерная арифметика работает именно так, с переполнением. Позже ты узнаешь почему оно стратегически важно для отрицательных чисел, а сегодня научишься складывать положительные, понимать природу переполнения и цикличности чисел. В добрый путь, бро! ТГ: t.me/zealcomputing_rus ВК: vk.com/zealcomputing
Неплохо!
Ссылки на хабр в описании не доступны
Спасибо, исправил. Хабр зачем-то изменил постоянные ссылки, всё перестало работать. Теперь статья тут: habr.com/ru/articles/523654/
Можно сделать видео о сложении и умножении ieee754 чисел? Все не так просто, ведь порядки смещены а у нормализованных чисел неявные единицы в мантиссе...
Какой вы крутой !!! Спасибо вам , что такие вещи делаете . Я только пытаюсь начать программировать в свои 40+ и ваш материал мне очень понадобится.
Самое крутое будет ещё и тут: vk.com/zealcomputing
Бож, вот это действительно отличные новости! Спасибо! 🎉🎉🎉 Ваш курс по IEEE-754 -- одно из лучших произведений на Ютубе!
Спасибо! Причём сейчас я мог бы сделать его намного лучше. И может даже сделаю, или вторю часть. Пока вопрос.
✦ Канал в ТГ: t.me/zealcomputing_rus ✦ Группа ВК: vk.com/zealcomputing
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Это последний урок первой части курса. Практические рекомендации по применению арифметики с плавающей запятой. Некоторые уже описанные особенности и новые моменты: потеря коммутативности, ассоциативности, неожиданные проявления так называемой «невозмутимости». И самый важный совет! Этот совет поможет вам избежать почти 100% всех ошибок в типовых неответственных задачах. Далее пойдёт обсуждение ошибки двойного округления, катастрофическая потеря значащих цифр: когда и как возникает. В общем, вся простая практика, не требующая высшей математики, описана в этом уроке. ✦ Сообщество ТГ: t.me/zealcomputing_rus ✦ Сообщество ВК: vk.com/zealcomputing
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Следующий здесь: th-cam.com/video/LanLYZ2NMhM/w-d-xo.html Здесь вы полностью овладеваете форматами binary32 и binary64 (float и double), показываю как можно на C++ выводить битовое представление чисел (на других языках тоже можно, но не на всех, там я отсылаю вас к гуглу или яндексу и показываю как это просто, например, отыскать решение для Java). После этого урока структура чисел с плавающей запятой (если вы хорошо выполнили упражнения) вам полностью понятна и не может вызывать вопросов, на которые не было бы ответа в предыдущих уроках. ✦ Сообщество ТГ: t.me/zealcomputing_rus ✦ Сообщество ВК: vk.com/zealcomputing
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Следующий здесь: th-cam.com/video/AziHENG2yeQ/w-d-xo.html Знакомимся с округлением. Оно не так очевидно, как в привычной математике. Вы узнаете то, что трудно увидеть в простейших примерах, приводимых другими видео-преподавателями. А именно: перевести число из десятичной системы счисления в формат IEEE-754 бывает иногда трудно настолько, что некоторые компиляторы не умеют делать это правильно. Подробно объясню почему в теории всё так просто, а на практике - нет. ✦ Сообщество ТГ: t.me/zealcomputing_rus ✦ Сообщество ВК: vk.com/zealcomputing
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Следующий здесь: th-cam.com/video/55zQu00VrxM/w-d-xo.html Впервые переходим к двоичной системе счисления. Строим красивую и простую модель числа с плавающей запятой на основе 6 битов, предельно близкую к формату IEEE-754. Это самый важный и самый сложный урок. Предыдущие четыре урока были призваны показать откуда в арифметике с плавающей запятой берутся те или иные вещи, а теперь вы понимаете, как эти вещи красиво возникают в формате IEEE-754 на игрушечном и понятном примере. ✦ Сообщество ТГ: t.me/zealcomputing_rus ✦ Сообщество ВК: vk.com/zealcomputing
Первый урок здесь: th-cam.com/video/CHP5FAb_XPc/w-d-xo.html Следующий здесь: th-cam.com/video/RhHaRMPyttc/w-d-xo.html Откуда берутся специальные числа (бесконечность и NaN), зачем нужны. Появление знака у числа 0. Зачем? ✦ Сообщество ТГ: t.me/zealcomputing_rus ✦ Сообщество ВК: vk.com/zealcomputing
Будет ли видео/статья про умножение чисел double.
Не планировал
Есть кто из школы 21?
По- моему Вы ошиблись на 14.46 сказав, что отличие одного числа от другого начинается, когда их разница становится меньше 0,005. По логике, если нас интересует точность до сотых , то если разность чисел меньше 0,005 то это одинаковые числа?
Спасибо за видео)
в третьем уроке про "три камня" в задании в первом примере и в решениии первого примера слогаемые меняются местами, будьте внимательны, ребята)
Артем Михайлович, огромное спасибо за знания! Очень пригождаются в одном из проектов в Школе21, где мы самостоятельно реализуем некоторые ф-ии библиотеки math.h. Поправьте, пожалуйста, если ошибаюсь, но 22:44 число 101110 это не 1,75, а -1,75.
Рад, что нравится. Да, опечатки случаются :)
В упражнении 1(ссылка с привязкой ко времени th-cam.com/video/RhHaRMPyttc/w-d-xo.html) нет ли ошибки в третьем примере ? 0 00 001(2) = 0,125(10) ? Смещенная экспонента = 0, число денормализованное, значит экспонента = минимально возможной, т.е -1 Восстанвливаем мантиссу = 0,001. 0,001 * 2^-1 = 0.0001(2) = 0.0625(10)
Также перевод 0,125. Под экспоненту выделено 2 бита, т.е смещение = 1. 0,125(10) = 0,001(2) = 0,01 * 2^-1. Смещенная экспонента = 0. Тогда получается, что число должно быть закодировано так: 0 00 010
Максим, нет, всё верно. Я предлагаю сравнить формат хранения числа из упражнения 3, и пример, который был на отметке 16:08 . Там разные экспоненты, у них разные размеры! И в упражнении минимальная экспонента вовсе не -1.
Проблема решена в 1959-ом году в ЭВМ "Сетунь", так как там изпользуется симметричная троичная система счисления.
Нет, не решена. Проблема не зависит от инструмента, которым мы представляем числа, она фундаментальна по своей природе.
@@zealcomputing-rus В симметричной троичной системе(множество {-1, 0, 1}) реально нет проблемы округления, так как нужная точность достигается путём отбрасывания ненужных цифер(абсолютная величина числа отбрасываемых цифер не превышает половины абсолютного значения младшей из оставшихся). Проблема округления появляется, если брать несимметричную троичную систему(множество {0, 1, 2}), так как двойка будет нарушать верхнее объстоятельство . Этот вопрос изучен, тем более перед тем как писать коммент проверил написанное в книжке "МЦВМ Сетунь". Говоря иначе, проблема округления будет существовать до тех пор, пока компьютеры не перейдут на симметричную троичную систему счисления, а пока приходится думать над проблемой что представлена в ролике.
Попробуйте перейти в троичную систему, там правильно округлить, и вернуться обратно. Если бы так можно было сделать, то задача действительно была бы решена. Но нет, увы.
@@zealcomputing-rus Речь шла о механическом переходе, то есть чтобы электронные схемы изначально были троичными, а не двоичными. Не смотря на это, благодарю вас за ответ, так как понял, что деление в компьютере всё равно приведёт к проблеме округления.
Любая подобная механическая схема может быть виртуализирована, заменена имитацией, чем и занимается виртуальная машина. Если бы существовала такая машина, на ней можно было бы решать задачу, переходя туда и обратно. К сожалению, в нашем мире такой переход без потер невозможен по многим причинам.
Но спасибо автору, а то по теме очень мало материалов(
😔
🤦♀ мне всего лишь нужно понять что такое плавающая точка. просто понять принцип. и при слове "переполнение" понимаю что и здесь этого нет. все упиваются формулами
Принцип в этих видео представлен прекрасно. Есть часть переменной, которая хранит значение числа в двоичном виде по определённому правилу. Другая часть показывает, на сколько разрядов вправо или влево относительно первого надо сдвинуть точку, разделяющую целую и дробную части.
Спасибо
Я так понимаю, алгоритм суммирования массива на слайде 6:40 - это алгоритм Кэхэна (или Кэхэна-Бабушки) (Kahan summation algorithm). Однако этот алгоритм не даёт гарантии отсутствия потери точности, он только уменьшает величину ошибки. Есть модификации этого алгоритма - алгоритм Ньюмайера и алгоритм Клейна. Правильно ли я понимаю, что на сегодняшний день не существует алгоритма, который гарантировал бы суммирование ряда с получением всех правильных разрядов результата (естественно, с учётом ошибки округления)?
Привет, Сергей. Да, это алгоритм Кэхэна, и есть ряд других, более точных, часть из них описана в другом видео: th-cam.com/video/qi193h_dsyg/w-d-xo.html Там же показано, как алгоритм Кэхэна может работать хуже наивного сложения. Естественно, если мы попытаемся сложить самое большое и самое маленькое число из диапазона (например) double, то мы НИКАК вообще не получим точное значение, если не возьмём несколько десятков тысяч бит. Но из алгоритмов, описанных в указанном ролике можно построить сколько угодно длинный "каскад" по типу целочисленной длинной арифметики, но, как бы, в другую сторону. Абсолютная точность будет гарантирована, если число бит, которые у нас есть, больше чем нужно на хранение мантиссы. Иными словами, все эти алгоритмы основаны на простом приёме увеличения точности за счёт дополнительной переменной. Применяя это каскадно, мы можем взять 3, 4, 10, 1000 переменных и увеличивать точность покуда хотим. Вопрос лишь в объеме памяти и времени на вычисления. Это как длинная арифметика с целыми числами. Только как бы в другую сторону. Точность гарантируется, если мы не вылезаем за пределы возможного диапазона. То есть если число бит на точное представление мантиссы достаточное, всё будет точно.
Я так понимаю ютуб выключил монетизацию и видео стали в открытом доступе. Я готов задонатить , скиньте куда это можно сделать) ПС нашёл в первом видео и перевёл)
Ильяс, спасибо. Только сейчас увидел комментарий. Нет, это было 4 видео из 8, а полный курс раньше лежал на моей платформе. Сейчас я открыл все 8 уроков, только что их залил. ПС. Не видел, куда направили донат, но видел как вы приобрели курс по мотивации у меня :)
Это великолепно!
Просто бомба, самое то на 1 курсе ИВТ
Очень интересно, но ни*рена не понятно.