
Как работают числа с плавающей точкой - основы программирования
содержание видео
Дата: 2023-03-12
Похожие видео
Комментарии и отзывы: 20
Пендальф
Решение проблемы простое: нужно хранить дробные числа как отношение целых. Например, 5, 9=59/10 или в двоичной системе: 111011/1010. И все, никакой потери точности. В этом виде число можно умножать, делить и делать с ним что угодно, с абсолютной точностью. Проблема только в том, что при большом количестве операций умножения/деления длина числителя и знаменателя будет быстро разрастаться. Но, например, в бухгалтерии не так часто нужно последовательно умножать и делить, так что можно использовать такой формат записи там, во избежание мухлежа с чьей-то зарплатой.
ответить
Решение проблемы простое: нужно хранить дробные числа как отношение целых. Например, 5, 9=59/10 или в двоичной системе: 111011/1010. И все, никакой потери точности. В этом виде число можно умножать, делить и делать с ним что угодно, с абсолютной точностью. Проблема только в том, что при большом количестве операций умножения/деления длина числителя и знаменателя будет быстро разрастаться. Но, например, в бухгалтерии не так часто нужно последовательно умножать и делить, так что можно использовать такой формат записи там, во избежание мухлежа с чьей-то зарплатой.
ответить
Anton
Я правильно понимаю, что если мантиссу сдвигать до точки не вынося единицу в целую часть, то забывать достаточно будет только нулевую целую часть (не надо держать в голове, что там всегда единица, а к показателю степени в таком случае прибавляется 128, а не 127? В таком случае получается, что показатель степени пишется по тем же правилам, что и обычные знаковые целые, только старший бит знака инвертирован и не надо никаких 127 прибавлять-отнимать, достаточно поксорить бит знака.
ответить
Я правильно понимаю, что если мантиссу сдвигать до точки не вынося единицу в целую часть, то забывать достаточно будет только нулевую целую часть (не надо держать в голове, что там всегда единица, а к показателю степени в таком случае прибавляется 128, а не 127? В таком случае получается, что показатель степени пишется по тем же правилам, что и обычные знаковые целые, только старший бит знака инвертирован и не надо никаких 127 прибавлять-отнимать, достаточно поксорить бит знака.
ответить
Alek
00: 00 Введение
00: 46 Число с плавающей точкой
01: 37 Институт IEEE
02: 08 Математический сопроцессор
02: 48 Перевод дробных чисел
03: 53 Экспоненциальная запись
05: 27 Форматы хранения дробных чисел
06: 14 Хранение числа в формате одинарной точности
07: 36 Хранение степени
10: 24 Хранение специальных значений
11: 34 Восстановление числа из памяти
13: 06 Бесконечная дробь
14: 02 Запись бесконечной дроби в память
14: 46 Обзор других форматов
15: 50 Заключение
ответить
00: 00 Введение
00: 46 Число с плавающей точкой
01: 37 Институт IEEE
02: 08 Математический сопроцессор
02: 48 Перевод дробных чисел
03: 53 Экспоненциальная запись
05: 27 Форматы хранения дробных чисел
06: 14 Хранение числа в формате одинарной точности
07: 36 Хранение степени
10: 24 Хранение специальных значений
11: 34 Восстановление числа из памяти
13: 06 Бесконечная дробь
14: 02 Запись бесконечной дроби в память
14: 46 Обзор других форматов
15: 50 Заключение
ответить
Станислав
Спасибо, очень интересно!
Возможно именно это и является проблемой некоторых размеров при создании чертежа печатной платы (или 3d модели печатной платы. Например: межцентровые расстояния из 15 мм превращаются в 15. 0000001 или 14. 99999999 при конвертации из pcb в dxf и из dxf в frw (это формат фрагмента в Компасе. Если кто-то сталкивался с подобным подскажите, а то всем отделом голову ломаем. Прошу прощения если нафлудил. Заранее благодарю.
ответить
Спасибо, очень интересно!
Возможно именно это и является проблемой некоторых размеров при создании чертежа печатной платы (или 3d модели печатной платы. Например: межцентровые расстояния из 15 мм превращаются в 15. 0000001 или 14. 99999999 при конвертации из pcb в dxf и из dxf в frw (это формат фрагмента в Компасе. Если кто-то сталкивался с подобным подскажите, а то всем отделом голову ломаем. Прошу прощения если нафлудил. Заранее благодарю.
ответить
Redice
всё же я не понимаю, что если мы сложим например 2. 5 + 2. 5; переведем число 2, 5 в двоичную => 1. 01 21 => мантисса = 01, степень = 1, представим степень в двоичном виде => 127 + 1 = 128 = 1000 0000. Выходит, согласно правилу, число 2, 5 должно выглядеть как
0 1000 0000 0100 0000 0000 0000 0000 000. Сложим их и получим отрицательное число
1 0000 0000 1000 0000 0000 0000 0000 000. Что я не так делаю?
ответить
всё же я не понимаю, что если мы сложим например 2. 5 + 2. 5; переведем число 2, 5 в двоичную => 1. 01 21 => мантисса = 01, степень = 1, представим степень в двоичном виде => 127 + 1 = 128 = 1000 0000. Выходит, согласно правилу, число 2, 5 должно выглядеть как
0 1000 0000 0100 0000 0000 0000 0000 000. Сложим их и получим отрицательное число
1 0000 0000 1000 0000 0000 0000 0000 000. Что я не так делаю?
ответить
blek
Спасибо за ваш труд! Можно спросить, обязательно ли писать экспоненту в двоичной системе? На моменте 9: 46 я сначала не поняла почему степень равна=10, только потом догнала что это 2 в двоичной системе. Получается надо писать Е в двоичной системе? В формулах же обычно либо десятичная система, либо Е+127, поэтому не совсем понимаю.
ответить
Спасибо за ваш труд! Можно спросить, обязательно ли писать экспоненту в двоичной системе? На моменте 9: 46 я сначала не поняла почему степень равна=10, только потом догнала что это 2 в двоичной системе. Получается надо писать Е в двоичной системе? В формулах же обычно либо десятичная система, либо Е+127, поэтому не совсем понимаю.
ответить
Gunnar
До того как я узнал, про стандарт числа с плавающей точкой, я думал что целая часть и дробная часть просто лежат по разным ячейкам в памяти, просто расположенным рядом
В микроконтроллерах, я так понял, часто вообще нет поддержки чисел с плавающей точкой, и используются множители представляя число как обычный int.
ответить
До того как я узнал, про стандарт числа с плавающей точкой, я думал что целая часть и дробная часть просто лежат по разным ячейкам в памяти, просто расположенным рядом
В микроконтроллерах, я так понял, часто вообще нет поддержки чисел с плавающей точкой, и используются множители представляя число как обычный int.
ответить
Alex
Респект, автору. Благодаря объяснению понял что еще люди земли не создали комп который может высчитать абсолютный НОЛЬ, а то б уже давно смогли понять физические свойства тонких материй мироздания и научились путешествовать в космосе. В общем есть направление куда двигаться и над чем работать, человечеству. )
ответить
Респект, автору. Благодаря объяснению понял что еще люди земли не создали комп который может высчитать абсолютный НОЛЬ, а то б уже давно смогли понять физические свойства тонких материй мироздания и научились путешествовать в космосе. В общем есть направление куда двигаться и над чем работать, человечеству. )
ответить
EuroDJ
Блин. очень крутая подача. и прорисовка инфографики. Огромный респект. НО. подскажи плиз, как ты это всё делаешь? Проходил какие-то курсы по инфографике? Какой-то специализированный софт? (Как и в чём это всё монтируется) Явно видно рука набита (или огромный талант; ) ). раскрой секрет плиз, как такому научиться.
ответить
Блин. очень крутая подача. и прорисовка инфографики. Огромный респект. НО. подскажи плиз, как ты это всё делаешь? Проходил какие-то курсы по инфографике? Какой-то специализированный софт? (Как и в чём это всё монтируется) Явно видно рука набита (или огромный талант; ) ). раскрой секрет плиз, как такому научиться.
ответить
Екатерина
Вопрос от джуниора.
Предположим, я создам переменную float testFloatVar = 7. 25;
И хочу посмотреть, что память отведённая под это число, выглядит так, как предусмотрено стандартом.
Как мне это сделать?
Если я создам указатель на эту переменную и выведу его разыменованное значение, то получу 7. 25
ответить
Вопрос от джуниора.
Предположим, я создам переменную float testFloatVar = 7. 25;
И хочу посмотреть, что память отведённая под это число, выглядит так, как предусмотрено стандартом.
Как мне это сделать?
Если я создам указатель на эту переменную и выведу его разыменованное значение, то получу 7. 25
ответить
Alexander
Не понял на моменте восстановления числа из памяти. Почему мы отбросили остаточные нули в мантиссе? Что если в десятичной записи там будет храниться не 13 (1101, а 26 (11010? Где хранится информация о том, сколько битов надо отрубить от мантиссы?
ответить
Не понял на моменте восстановления числа из памяти. Почему мы отбросили остаточные нули в мантиссе? Что если в десятичной записи там будет храниться не 13 (1101, а 26 (11010? Где хранится информация о том, сколько битов надо отрубить от мантиссы?
ответить
Anton
Я правильно понимаю, что мантисса числа, когда целая часть всегда равна единице имеет двоичную запись, а 10 в какой-то степени записаны десятичной записью? Неужто не придумали способов обозначать какое число в какой системе записано!
ответить
Я правильно понимаю, что мантисса числа, когда целая часть всегда равна единице имеет двоичную запись, а 10 в какой-то степени записаны десятичной записью? Неужто не придумали способов обозначать какое число в какой системе записано!
ответить
NoMore
Как всегда шикарная подача и отменная плотность полезного материала, единственный момент, который я не совсем понял - 2: 55, Вы говорите переводим из десятичной в двоичную, а на экране появляется перевод из двоичной в десятичную
ответить
Как всегда шикарная подача и отменная плотность полезного материала, единственный момент, который я не совсем понял - 2: 55, Вы говорите переводим из десятичной в двоичную, а на экране появляется перевод из двоичной в десятичную
ответить
CHITUS
Спасибо, я столько всего копал и нифига не мог понять до конца. Все урывки какие то и противоречивая инфа. Спасибо, наконец то все пазлы собрались воедино! Продолжай, не останавливайся. Желаю огромных успехов дружище!
ответить
Спасибо, я столько всего копал и нифига не мог понять до конца. Все урывки какие то и противоречивая инфа. Спасибо, наконец то все пазлы собрались воедино! Продолжай, не останавливайся. Желаю огромных успехов дружище!
ответить
Илья
Господа шарящие. Подскажите, а почему число с плавающей точкой нельзя представить как два отдельных числа? В первом хранить целую часть, а во втором дробную часть, но она при этом будет представлена целым числом.
ответить
Господа шарящие. Подскажите, а почему число с плавающей точкой нельзя представить как два отдельных числа? В первом хранить целую часть, а во втором дробную часть, но она при этом будет представлена целым числом.
ответить
Иван
Для меня флоаты это очередное разочарование от несовершенства компьютерных технологий. О каких идеалах программирования можно говорить, если базовые операции в вычислительной техники закостылили.
ответить
Для меня флоаты это очередное разочарование от несовершенства компьютерных технологий. О каких идеалах программирования можно говорить, если базовые операции в вычислительной техники закостылили.
ответить
VOVAN781000
Пишите на ассемблере ) Да, ассемблер долго писать, за то ооочень быстро работает, оооочень мало места занимает, оооочень мало жрёт энергии, и пофигу на подобного рода геморрой.
ответить
Пишите на ассемблере ) Да, ассемблер долго писать, за то ооочень быстро работает, оооочень мало места занимает, оооочень мало жрёт энергии, и пофигу на подобного рода геморрой.
ответить
Hudshie
Отличное видео и прекрасная подача материала, наконец-то открылась загадка ещё со школьной скамьи, почему при делении числа с остатком калькулятор показывал число вида 5. 89999961
ответить
Отличное видео и прекрасная подача материала, наконец-то открылась загадка ещё со школьной скамьи, почему при делении числа с остатком калькулятор показывал число вида 5. 89999961
ответить
TriXioN
Конечно, скорек всего, это будет глупый вопрос. Но почему нельзя преобразовывать дробную часть числа таким же методом, что мы используем для целой части, был бы рад узнать
ответить
Конечно, скорек всего, это будет глупый вопрос. Но почему нельзя преобразовывать дробную часть числа таким же методом, что мы используем для целой части, был бы рад узнать
ответить
Greenkingshop
Всё хорошо. НО!
На 8: 37 выносная линия к значению Степень - 8 бит смещена на 1 пиксель относительно выносной линии значения Дробная часть - 23 бита
Акела промахнулся.
ответить
Всё хорошо. НО!
На 8: 37 выносная линия к значению Степень - 8 бит смещена на 1 пиксель относительно выносной линии значения Дробная часть - 23 бита
Акела промахнулся.
ответить
Добавить отзыв, комментарий
Другие видео канала















