Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/48: Рейтинг темы: голосов - 48, средняя оценка - 4.71
1 / 1 / 2
Регистрация: 23.09.2012
Сообщений: 91

Точность числа с плавающей точкой

02.12.2012, 20:38. Показов 10332. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У типа float числа одинарной точности с плавающей запятой обеспечивают относительную точность 7-8 десятичных цифр.
Внимание, вопрос! Объясните, пожалуйста, когда точность 7, а когда 8 цифр.
P.S. Примеры приветствуются)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.12.2012, 20:38
Ответы с готовыми решениями:

Максимальная точность для чисел с плавающей точкой
Суть поставленной задачи: дан вектор от 10_000 до 100_000 элементов, нужно проходить по вектору, брать два первых значения которые должны...

Конструирование значения целого числа или числа с плавающей точкой по его дампу
Как сконструировать значения целого числа(char, short int, long int) или числа с плавающей точкой(float,double) по его дампу(bin,oct,hex)??

Усечение числа с плавающей точкой
Доброго времени суток! Собсно сабж. floor(v*1000)/1000 не помогает, обнуляется только несколько знаков после запятой, а остальные...

13
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
02.12.2012, 20:41
числа с плавающей точкой на то и называют "с плавающей точкой", так как точка плавает в зависимости от порядка(экспоненты) числа
0
1 / 1 / 2
Регистрация: 23.09.2012
Сообщений: 91
02.12.2012, 20:43  [ТС]
И все-таки) когда 7, а когда 8?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
02.12.2012, 20:45
какое 7-8??? Ты вообще знаешь, что такое "число с плавающей точкой", как оно хранится в памяти и почему точка "плавает"???
тут объясняется как точность меняется с изменением порядка http://habrahabr.ru/post/112953/
0
 Аватар для MaRKerNSK
24 / 11 / 0
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 8
02.12.2012, 20:48
Точность чаще зависит от кампилятора, и от систмы в целом, хочешь большей точности используй Double - числа с двойной точностью,
а вообще как сказал
Kuzia domovenok, сначала изучите принцип их работы.
0
1 / 1 / 2
Регистрация: 23.09.2012
Сообщений: 91
02.12.2012, 20:57  [ТС]
Я понимаю! сто раз уже читал про экспоненту, мантиссу, неявную единицу! Про то, что у double точность больше, мне также хорошо известно. Если, domovenok, ВЫ не можете ответить на конкретно заданный мною вопрос, отвечать и строить из себя крутого программиста не стоит.
0
 Аватар для MaRKerNSK
24 / 11 / 0
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 8
02.12.2012, 21:08
Ну как я сказал если отвечать точно на ваш вопрос то ответ такой :
точность зависит от личных параметров системы и компилятора.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
02.12.2012, 21:10
Цитата Сообщение от Troll1 Посмотреть сообщение
Если, domovenok, ВЫ не можете ответить на конкретно заданный мною вопрос, отвечать и строить из себя крутого программиста не стоит.
и правда тролль что ли?

Если нет, то представь такой упрощённый пример,
что переменные хранятся в десятичной системе (если тебе так проще) с одним десятичным разрядом под порядок(со знаком) и пятью под мантиссу.
В таком виде можно хранить следующие числа
0,99999*10^9=999990000,0 (точность до 5го знака слева от запятой)
0.99999*10^5=99999,0 (точность до 1го знака слева от запятой)
0.99999*10^0=0,99999 (точность до 5го знака справа от запятой)
0.99999*10^-5=0,0000099999 (точность до 10го знака справа от запятой)
0,99999*10^-9=0,00000000099999(точность до 14го знака справа от запятой)

как тут можно говорить о какой-то конкретной точности в N знаков?
+ глянь эту картинку и подумай о точности http://habrastorage.org/storag... 838184.gif
1
1 / 1 / 2
Регистрация: 23.09.2012
Сообщений: 91
02.12.2012, 21:35  [ТС]
Вот смотри на мой пример z=(y-x)^1/2 при y=776644278 x=687524
при y=776644278 x=687542
Результат один и тот же(можешь проверить, если делать нечего).
Вот в чем вопрос
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
02.12.2012, 22:29
Рассмотрим твоё число y=776644278 какого оно порядка? По основанию 10 порядок очевидно 9, т.к. y=0,776644278*10^9
А по основанию 2? Посчитаем, что log2(776644278)=29.533 Значит порядок числа 29
Представим число в виде 776644278=M*2^29, где 2^29=536870912, где М - мантисса
Тогда находим y=1,4466126970946788787841796875*2^29


Теперь мы готовы записать это число в переменную типа float. Об этом типе известно, что он выделяет в памяти
под мантиссу 23 бит, а под порядок 8 бит
Тогда порядок запишется в виде десятичное 29=00011101 в двоичной. (5 бит влезли в предоставленные флоатом 8)

Мантисса записывается как число с отброшенной точкой и первой единицей (т.к. в таком представлении числа, число
всегда начинается с единицы и она подразумевается по умолчанию)
То есть 4466126970946788787841796875 в десятичной это 1110011000111010000001000000010110011001 0010100000101100001011 в двоичной.
Имеем Аж 62 двоичных разряда! придётся обрезать с конца до 23х! Вот здесь и вносится погрешность

Аналогично считаем х, вносим ещё погрешность, при расчётах вносим ещё.. и того и получаем.
1
1 / 1 / 2
Регистрация: 23.09.2012
Сообщений: 91
02.12.2012, 23:17  [ТС]
Добавлено через 6 минут
Спасибо за очень развернутый и подробный ответ. Только я не догнал вот это
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Тогда находим y=1,4466126970946788787841796875*2^29
Если я правильно понял y=1,4466126970946788787841796875-это мантисса. Если да, откуда берется это число 1,4466126970946788787841796875?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
02.12.2012, 23:50
твоё число y делится на два в двадцать девятой и получается мантисса
Почему именно в 29й ? Потому что если разделить на 2 в 30й получится число меньше единицы, а если на 2 в 28й, то больше. А мантисса должна иметь формат 1,ххххххх
Как я нашёл, число 29 (порядок) быстро? Взял логарифм по основанию 2 от у.
0
1 / 1 / 2
Регистрация: 23.09.2012
Сообщений: 91
05.12.2012, 12:32  [ТС]
Почему надо обрезать с конца до 23?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
05.12.2012, 18:44
тип float выделяет в памяти под мантиссу 23 бит
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.12.2012, 18:44
Помогаю со студенческими работами здесь

Округлить числа с плавающей точкой
Подскажите почему работает неправильно! Не округляет, а выдает только числа до запятой! Исправьте пожалуйста!! Вот задание: Строка...

Вывод числа с плавающей точкой
Доброго всем времени суток. Пытаюсь вывести число с плавающей запятой на LCD. long int Eb = 0x5959; char st_Ebf =...

Числа с плавающей точкой после деления
Помогите, какая тут ошибка? мне нужно чтобы вышло числа с плавающей точкой после деления( например, 13/2=6,5), а у меня почему то выходит...

Неправильный вывод числа с плавающей точкой
Здравствуйте. Почему когда я ввожу число с плавающей точкой, например, 43.2300012, а затем вывожу его, то при выводе печатается не...

Вывод числа с плавающей точкой в строку с округлением
В результате работы следующего блока char buf; float val = 123.4567F; sprintf(buf,"%f", val); SetWindowText(hLabel2, buf); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru