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

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

На этом занятии мы попробуем осознать сложность представления вещественных чисел, познакомимся со стандартом IEEE754, посмотрим на два способа работы с плавающими числами в ассемблере x86 и даже обсудим влияние на оптимизации. Параллельно будет введена концепция строгого алиасинга: в будущем она нам сильно пригодится.

Семинарист: Константин Владимиров.
Дата: 18 марта 2024 года.
Съёмка: Марк Гончаров.
Звук: Юлий Тарасов.

Timeline
00:00 Вещественные числа
07:27 Представление с плавающей точкой
18:32 Нули и бесконечности
26:55 Реинтерпретация и каст
32:40 Упражняемся с плавающими числами
45:10 Округления
50:30 Время решать задачи
58:00 Старые и новые FP числа в ассемблере
01:08:53 Расширения в Sytem V ABI
01:25:40 Оптимизации и -ffast-math

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

не перестаю восхищаться лектором и аудиторией. жаль что нет возможности на одинаковом уровне громкости слышать как лектора так и аудиторию. какждый ваш выпуск для меня настоящий праздник. доброго здоровья вам и вашим близким как лектору так и аудитории

MikhailGoncharov-tlcr
Автор

Интересные лекции! Хоть и базовую часть знаешь, но юморок своё дело делает - фокус не теряется, так как не нуДно)

саняпух-жр
Автор

Смотрится, как хороший фильм с закрученным сюжетом. Никогда не знаешь, что тебя ждёт за углом. Cliffhanger 10/10.

ds
Автор

спасибо, попозже посмотрим обязательно)

Вовик-дл
Автор

ну и про union не забываем если нужно представить float как unsigned

MVZ
Автор

По поводу кастинга - я понимаю почему кастинг не будет работать в случае кастинга в сторону не char. Т.к. он формирует выходные данные с учётом репрезентации типа. Но помимо char* существует ещё и void* который гарантирует что репрезентация будет исходной. Я бы прости приводил к void* и затем к dst.

wusikijeronii
Автор

да, вместо abs(int) правильно реализовывать negabs(int)

alexloktionoff
Автор

Для этого семинара в качестве задачи со звездочкой на дом подойдет разобрать работу алгоритму fast inverse square root из движка Quake 3

Airatgl
Автор

на тему извлечения битов: верно ли что union {float f; unsigned u;} это по сути тот же каст адреса и то же уб? И может ли в теории возникнуть ситуация, где каст/юнион и memcpy дадут разный результат?

jcy
Автор

3:00, Вами сказано "...трансцендентные числа, которые тоже вычислимы" .Это неверное утверждение.

КарлГаусс-ъи
Автор

Можно ли для получения битов float в int использовать reinterpret_cast вместо memcpy? Без указателей, просто интерпретировать значение. Если нет, то почему?

Денис-ььс
Автор

51:22 ну как можно было пропустить такую возможность оставить студентам 1.5f часа? 😆

Stedmiel
Автор

А почему не используют1-байтовые float, разработчики железа, почему не делают такой функционал на cpu gpu? К примеру для расчета цвета пикселей c simd. Ведь по факту точность для 256 значений не важна в многих случаях.

tarmo
Автор

.1 0.5 .01 0.25 вещественные числа точно представляемые в эвм

АлександрПетров-гон
Автор

Разве не около ±1-цы наибольшая плотность чисел т.к. экспонента минимальна.
А промежуток между -float_min и +float_min вообще выпадает, кроме нуля(ну это исключение).
Либо около min всё таки?

_dzen_tv_
Автор

1:34:30 а разве он это сделал ни для того, чтобы выравниться по кэш-линии? 4*16 - как раз 64. То есть за одну итерацию мы гарантированно ни разу не промахнёмся через кэш. А значит современный процессор сделает эти 4 сложения за 1 такт. Или я что-то совсем перемудрил?

sibedir
Автор

Константин, сделайте пожалуйста лекцию по сборке проектов с помощью make

johndick