Практика языка C (МФТИ, 2023-2024). Семинар 6.4. Представления плавающих чисел и ассемблер x86.

  Рет қаралды 4,967

Konstantin Vladimirov

Konstantin Vladimirov

Күн бұрын

Пікірлер: 50
@MikhailGoncharov-tl4cr
@MikhailGoncharov-tl4cr 6 ай бұрын
не перестаю восхищаться лектором и аудиторией. жаль что нет возможности на одинаковом уровне громкости слышать как лектора так и аудиторию. какждый ваш выпуск для меня настоящий праздник. доброго здоровья вам и вашим близким как лектору так и аудитории
@ds9410
@ds9410 5 ай бұрын
Смотрится, как хороший фильм с закрученным сюжетом. Никогда не знаешь, что тебя ждёт за углом. Cliffhanger 10/10.
@саняпух-ж4р
@саняпух-ж4р 6 ай бұрын
Интересные лекции! Хоть и базовую часть знаешь, но юморок своё дело делает - фокус не теряется, так как не нуДно)
@Вовик-д5л
@Вовик-д5л 6 ай бұрын
спасибо, попозже посмотрим обязательно)
@bigtown2012
@bigtown2012 2 ай бұрын
Жалко два лайка нельзя поставить)
@loverock8384
@loverock8384 6 ай бұрын
Благодарю за лекцию ❤
@wusikijeronii4510
@wusikijeronii4510 5 ай бұрын
По поводу кастинга - я понимаю почему кастинг не будет работать в случае кастинга в сторону не char. Т.к. он формирует выходные данные с учётом репрезентации типа. Но помимо char* существует ещё и void* который гарантирует что репрезентация будет исходной. Я бы прости приводил к void* и затем к dst.
@КарлГаусс-ъ2и
@КарлГаусс-ъ2и 6 ай бұрын
3:00, Вами сказано "...трансцендентные числа, которые тоже вычислимы" .Это неверное утверждение.
@tilir
@tilir 6 ай бұрын
В смысле неверное? Число пи трансцендентно и при этом вычислимо.
@КарлГаусс-ъ2и
@КарлГаусс-ъ2и 6 ай бұрын
Константин, я не думал, что мне придётся это Вам пояснять. Но Ваше утверждение на лекции звучит, так - "Все трансцендентные числа - вычислимы", вот это утверждение неверно. Я не спорю с тем, что некоторые трансцендентные числа - вычислимы. Но я утверждаю, что почти все трансцендентные числа - не вычислимы.
@tilir
@tilir 6 ай бұрын
​@@КарлГаусс-ъ2и я не думал что меня именно так можно понять. Я разумеется имел в виду ту небольшую часть трансцендентных чисел которые тоже вычислимы.
@Airatgl
@Airatgl 6 ай бұрын
Для этого семинара в качестве задачи со звездочкой на дом подойдет разобрать работу алгоритму fast inverse square root из движка Quake 3
@tilir
@tilir 6 ай бұрын
Мы будем эту задачу рассматривать но позднее. Для неё нужно понимать метод Ньютона. У нас будет отдельный семинар про научные вычисления.
@Stedmiel
@Stedmiel 6 ай бұрын
51:22 ну как можно было пропустить такую возможность оставить студентам 1.5f часа? 😆
@Денис-ь8ь7с
@Денис-ь8ь7с 2 ай бұрын
Можно ли для получения битов float в int использовать reinterpret_cast вместо memcpy? Без указателей, просто интерпретировать значение. Если нет, то почему?
@tilir
@tilir 2 ай бұрын
Нельзя т.к. это strict aliasing violation
@Денис-ь8ь7с
@Денис-ь8ь7с 2 ай бұрын
@@tilir но… memcpy чем лучше? ) мы обманываем просто компилятор? По итогу ведь и так и так получаем копию битового содержимого.
@tilir
@tilir 2 ай бұрын
@@Денис-ь8ь7с наоборот. С помощью memcpy мы НЕ обманываем компилятор.
@Денис-ь8ь7с
@Денис-ь8ь7с 2 ай бұрын
@@tilir Я подумаю над этим. Спасибо.
@jcy4691
@jcy4691 6 ай бұрын
на тему извлечения битов: верно ли что union {float f; unsigned u;} это по сути тот же каст адреса и то же уб? И может ли в теории возникнуть ситуация, где каст/юнион и memcpy дадут разный результат?
@tilir
@tilir 6 ай бұрын
Нет это т.н. type punning. У него более спорный статус. Его то запрещают то разрешают. Лучше им не пользоваться никогда. Но это не имеет отношения к strict aliasing.
@АлександрПетров-г8о1н
@АлександрПетров-г8о1н 6 ай бұрын
.1 0.5 .01 0.25 вещественные числа точно представляемые в эвм
@tilir
@tilir 6 ай бұрын
Вы угадали ровно половину. 0.1 не может быть точно представлено в ieee754, у меня на видео есть пошаговое приближение. Найдите у себя вторую ошибку ))
@АлександрПетров-г8о1н
@АлександрПетров-г8о1н 6 ай бұрын
я не отдупляю почему 0.1 не точное представление .5 @@tilir
@tilir
@tilir 6 ай бұрын
Потому что 0.1 это (1 / 10), а 10 это не степень двойки.
@tarmo9010
@tarmo9010 6 ай бұрын
А почему не используют1-байтовые float, разработчики железа, почему не делают такой функционал на cpu gpu? К примеру для расчета цвета пикселей c simd. Ведь по факту точность для 256 значений не важна в многих случаях.
@tilir
@tilir 6 ай бұрын
А почему бы для пикселей не использовать однобайтовые целые? Там где короткие floating point числа обоснованы -- в нейросетях например -- их делают. Всякие там bfloat16 и всё такое. Но серьёзное обоснование именно для восьми бит с плавающей точкой (а сколько на мантиссу?) мне не встречалось.
@victormustya1745
@victormustya1745 6 ай бұрын
​@@tilir как раз в AI сейчас модно не только 8-bit float (2 вида, s1e4m3 и s1e5m2), но даже и 4-bit float (s1e2m1). Но за пределами AI они не очень-то применимы.
@_dzen_tv_
@_dzen_tv_ 6 ай бұрын
Разве не около ±1-цы наибольшая плотность чисел т.к. экспонента минимальна. А промежуток между -float_min и +float_min вообще выпадает, кроме нуля(ну это исключение). Либо около min всё таки?
@tilir
@tilir 6 ай бұрын
Вы не учитываете денормализованные числа.
@_dzen_tv_
@_dzen_tv_ 6 ай бұрын
@@tilir Как раз про денормализованные числа речь. format | MINVAL (subnormal) binary32 | 1.40·10−45 binary64 | 4.94·10−324 Наводит на мысль что мы приближаемся к нулю, но не достигаем его. Функция f(x) = 1/x
@tilir
@tilir 6 ай бұрын
Для нуля есть представление "все нули" так что достигаем. Распределение чисел не гиперболическое, а скорее экспоненциальное, но не совсем из за артефактов представления.
@DART2WADER
@DART2WADER 6 ай бұрын
memcpy куда нибудь.
@sibedir
@sibedir 6 ай бұрын
1:34:30 а разве он это сделал ни для того, чтобы выравниться по кэш-линии? 4*16 - как раз 64. То есть за одну итерацию мы гарантированно ни разу не промахнёмся через кэш. А значит современный процессор сделает эти 4 сложения за 1 такт. Или я что-то совсем перемудрил?
@tilir
@tilir 6 ай бұрын
Про кеши будет через пару занятий, мы их пока не проходили. А так да, это взаимосвязано.
@sibedir
@sibedir 6 ай бұрын
@@tilir и про кэши будет ☺️ Как всё вкусно
@normanmaddyson8408
@normanmaddyson8408 6 ай бұрын
@@sibedir за один такт он их не может сделать, там же зависимость от предыдущих вычислений в xmm0. В примере с fast-math оно хорошо ложится на конвейнер, потому что результаты независимы друг от друга, но конвейер не означает идеальную параллельность (можете почитать в википедии). Так же латенси floating point инструкций далеко не 1 такт (llvm-mca на моем процессоре показывает 8 тактов для movups и 3 такта для addps)
@sibedir
@sibedir 6 ай бұрын
​@@normanmaddyson8408а, ну да 🤦‍♂️ тупанул. Это же сумма в один регистр. И про 1 такт, тут не верно я сказал. Конечно же имелось в виду, что 4 разом выполнятся. Спасибо, что поправили.
@MVZ1983
@MVZ1983 4 ай бұрын
ну и про union не забываем если нужно представить float как unsigned
@tilir
@tilir 4 ай бұрын
Не используйте type punning.
@alexloktionoff6833
@alexloktionoff6833 6 ай бұрын
да, вместо abs(int) правильно реализовывать negabs(int)
@tilir
@tilir 6 ай бұрын
И что эта функция должна делать?
@alexloktionoff6833
@alexloktionoff6833 6 ай бұрын
@@tilirвозвращать отрицательную величину модуля аргумента, и далее работать только с отрицательными величинами, разве не так?
@tilir
@tilir 6 ай бұрын
Интересная идея, спасибо. Я об этом почему-то раньше не думал и такой функции не встречал.
@johndick996
@johndick996 6 ай бұрын
Константин, сделайте пожалуйста лекцию по сборке проектов с помощью make
@thepawday
@thepawday 6 ай бұрын
Лучше cmake
@euuhgzz2791
@euuhgzz2791 6 ай бұрын
​@@thepawday что то что это... 💀
@tilir
@tilir 6 ай бұрын
Есть в планах и есть даже какой-то заготовленный материал именно по make/cmake. Но это будет не отдельная лекция, это будет мини-курс про вещи которые находятся вокруг программирования. Там будут системы сборки, управление версиями, управление пакетами, пайплайны, контейнеризация, вот это всё. Где-то в следующем году, вероятно.
How Strong is Tin Foil? 💪
00:26
Preston
Рет қаралды 116 МЛН
GIANT Gummy Worm Pt.6 #shorts
00:46
Mr DegrEE
Рет қаралды 84 МЛН
АЗАРТНИК 4 |СЕЗОН 2 Серия
31:45
Inter Production
Рет қаралды 1,1 МЛН
Как написать "Hello World!" на ассембли
53:58
БоркаБорик
Рет қаралды 18 М.
HTTP в 1С за 3 часа
3:23:54
IRONSKILLS - Курсы по 1С
Рет қаралды 445 М.
Космические гипотезы: Как возникло все?
3:51:04
Космическое путешествие
Рет қаралды 442 М.
How Strong is Tin Foil? 💪
00:26
Preston
Рет қаралды 116 МЛН