Практика языка C (МФТИ, 2023-2024). Семинар 8.2. Решение уравнений и вычисление функций.

preview_player
Показать описание
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.

Вторая часть восьмого семинара посвящена решению уравнений. Мы начнём с того, что рассмотрим разнообразные сложности и ловушки плавающих чисел. Далее мы займёмся нахождением корней уравнений: сначала рассмотрим методы в которых надо сохранять брекетинг корня, потом уйдём от них в неизвестность. Ну и в конце нас ждёт применение метода Ньютона для вычисления функций, разгадка магического инверсного корня, правила работы с комплексными числами и немного красоты в виде всяких фракталов.

Семинарист: Константин Владимиров.
Дата: 29 апреля 2024 года.
Съёмка: Владислав Белов.
Звук: Юлий Тарасов.

Timeline
00:00 Правила работы c плавающими числами
10:20 Аккуратнее с ошибками сложения
16:04 Помните о конечности диапазона
23:18 Дихотомия
30:00 Целочисленный квадратный корень
40:23 Бенчмаркинг целочисленного корня
45:11 Regula falsi
49:08 Нарушим брекетинг? И время для задач
54:50 Метод Ньютона
01:00:32 Вычисление функций
01:14:30 Быстрые приближения и магический инверсный корень
01:20:15 Комплексные числа и фрактал Ньютона
01:26:20 Голоморфная динамика и множество Жюлиа
01:31:58 Генератор фракталов и завершение

Errata
* Тут пока пусто
Рекомендации по теме
Комментарии
Автор

Преподаватель самый лучший!!! Все его видео пересмотрел (а мне уже почти 40 лет). Видно сразу, что любит свою профессию. Смотреть очень интересно.

РусланМочалов-нь
Автор

Семинары для себя это да) Сам на 4 курсе в другом ВУЗе, но смотреть интересно и местами есть новая информация.

wumi
Автор

Вспомнился ФОПФовый анекдот. Студент на экзамене по электродинамике все время подглядывает на ладонь руки. Преп ловит его, говорит: показывай шпаргалку. Тот показывает левую ладонь, там буква Л. Преп: зачем тебе это? Студент: правило левой руки помню, а какая из них левая, всё время забываю...

fedorbabkin
Автор

Лекции топ.
Програма поиска целочисленного квадратного корня страдает от переполнения когда x > std::numeric_limits<unsigned int>::max() /2;
Кажется в бинарном поиске всегда лучше вместо (r+l+1)/2 использовать l+r/2;
Так, так что оба могут не коректно работать, и левый и правый вариант, и тяжело выбрать.
А вообще я когда-нибудь заработаю кучу денег, чтобы мне не пришлось работать и поступлю к вам учиться на первый курс)

ssds
Автор

Добрый день, добрые люди. Ну что ж, приступим
🧘‍♂️🙄🤯

sibedir
Автор

1:13:10 - видимо запись решила скрыть, что мы увидим в реализации синуса) но я дополню, что почти всегда мы увидим ряды Тейлора (к примеру, как в musl и glibc)
P.S.: видео как всегда супер! Спасибо)

akulij
Автор

49:04 Задачка вроде бы очень просто решается логически. Если n людей скинутся каждый на одну монету больше, то сумма будет на n монет больше. Получаем n = 7 (было x - 4, стало x + 3).

vdalart
Автор

"Подсмотриваю" ваши семинары (хоть и в 2 раза старше студентов).
Про бенчмаркинг sqrt. На X64 и мощных ARM понятно что итеративно (даже Ньютоном) вариант dsqrt обогнать если и можно, то не просто. Но вот на каком-нибудь Cortex-
M0 или RISC-V без нужных расширений dsqrt может оказаться совсем небыстрым. При этом для целых есть хорошее начальное приближение что-нибудь типа x >> ((32 - clz(x)) >> 1), где clz - количество нулей впереди. Впрочем, у m0 clz тоже, если я правильно помню не одной командой считается.

alexanderspeshilov
Автор

Константин, спасибо за лекцию.
47:44 - опечатка "рещить"
1:18:31 - а такое приведение к float* - это разве не нарушение стрикт алиазинг?

alex_s_ciframi
Автор

да, одно дело когда говорят "для икс меньше дельта", а другое когда ты на, ещё зелёном, но уже графическом, мониторе видишь как колбасит ряд маклорена для синуса при удалении от нуля :)

evseee
Автор

34:35 Числа с плавающей точкой на столько отличаются от вещественных чисел, что там даже левое и правое не такие 😂

sibedir
Автор

Давали бы мне такие знания году так в 95-м...

hohlovin
Автор

40:07 (целочисленный квадратный корень). А не может получиться так, что корень из целого квадрата, например, из 121 будет представлен в виде числа с плавающей точкой как и округляя вниз мы получим 10 вместо 11? Я проверил - такой ошибки не возникает, но всегда ли это будет так?

vdalart
Автор

При проверке на равенство чисел с плавающей точкой рекомендую руководствоваться следующей методикой. Если, например, нужна точность до 5го знака после десятичной точки, берите допуск равный 0, 5*0, 00001 (т.е. Так Вы нивелируете погрешность математического округления.

lwind
Автор

Здравствуйте, доступа к заданиям в задачнике нет, и ссылка на плейлист с записями семинаров в конце задачника неправильная

narzaru