Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.81
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
02.12.2012, 20:38     Точность числа с плавающей точкой #1
У типа float числа одинарной точности с плавающей запятой обеспечивают относительную точность 7-8 десятичных цифр.
Внимание, вопрос! Объясните, пожалуйста, когда точность 7, а когда 8 цифр.
P.S. Примеры приветствуются)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 20:38     Точность числа с плавающей точкой
Посмотрите здесь:

Усечение числа с плавающей точкой C++
Как получить дробную часть числа с плавающей точкой? C++
C++ Выделить подстроку, которая соответствует записи вещественного числа с плавающей точкой
Отличить целое от числа с плавающей точкой в 32-разрядном регистре C++
Создать двумерный массив чисел с плавающей точкой и вывести на экран все числа по диагонали с лева на право C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.12.2012, 20:41     Точность числа с плавающей точкой #2
числа с плавающей точкой на то и называют "с плавающей точкой", так как точка плавает в зависимости от порядка(экспоненты) числа
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
02.12.2012, 20:43  [ТС]     Точность числа с плавающей точкой #3
И все-таки) когда 7, а когда 8?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.12.2012, 20:45     Точность числа с плавающей точкой #4
какое 7-8??? Ты вообще знаешь, что такое "число с плавающей точкой", как оно хранится в памяти и почему точка "плавает"???
тут объясняется как точность меняется с изменением порядка http://habrahabr.ru/post/112953/
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
02.12.2012, 20:48     Точность числа с плавающей точкой #5
Точность чаще зависит от кампилятора, и от систмы в целом, хочешь большей точности используй Double - числа с двойной точностью,
а вообще как сказал
Kuzia domovenok, сначала изучите принцип их работы.
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
02.12.2012, 20:57  [ТС]     Точность числа с плавающей точкой #6
Я понимаю! сто раз уже читал про экспоненту, мантиссу, неявную единицу! Про то, что у double точность больше, мне также хорошо известно. Если, domovenok, ВЫ не можете ответить на конкретно заданный мною вопрос, отвечать и строить из себя крутого программиста не стоит.
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
02.12.2012, 21:08     Точность числа с плавающей точкой #7
Ну как я сказал если отвечать точно на ваш вопрос то ответ такой :
точность зависит от личных параметров системы и компилятора.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.12.2012, 21:10     Точность числа с плавающей точкой #8
Цитата Сообщение от 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/storage/habr...2e6c838184.gif
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
02.12.2012, 21:35  [ТС]     Точность числа с плавающей точкой #9
Вот смотри на мой пример z=(y-x)^1/2 при y=776644278 x=687524
при y=776644278 x=687542
Результат один и тот же(можешь проверить, если делать нечего).
Вот в чем вопрос
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.12.2012, 22:29     Точность числа с плавающей точкой #10
Рассмотрим твоё число 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 в десятичной это 11100110001110100000010000000101100110010010100000101100001011 в двоичной.
Имеем Аж 62 двоичных разряда! придётся обрезать с конца до 23х! Вот здесь и вносится погрешность

Аналогично считаем х, вносим ещё погрешность, при расчётах вносим ещё.. и того и получаем.
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
02.12.2012, 23:17  [ТС]     Точность числа с плавающей точкой #11
Добавлено через 6 минут
Спасибо за очень развернутый и подробный ответ. Только я не догнал вот это
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Тогда находим y=1,4466126970946788787841796875*2^29
Если я правильно понял y=1,4466126970946788787841796875-это мантисса. Если да, откуда берется это число 1,4466126970946788787841796875?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.12.2012, 23:50     Точность числа с плавающей точкой #12
твоё число y делится на два в двадцать девятой и получается мантисса
Почему именно в 29й ? Потому что если разделить на 2 в 30й получится число меньше единицы, а если на 2 в 28й, то больше. А мантисса должна иметь формат 1,ххххххх
Как я нашёл, число 29 (порядок) быстро? Взял логарифм по основанию 2 от у.
Troll1
1 / 1 / 1
Регистрация: 23.09.2012
Сообщений: 91
05.12.2012, 12:32  [ТС]     Точность числа с плавающей точкой #13
Почему надо обрезать с конца до 23?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2012, 18:44     Точность числа с плавающей точкой
Еще ссылки по теме:

перевод из десятичной системы счисления в двоичную числа с плавающей точкой C++
C++ Выделить подстроку, которая соответствует записи вещественного числа с плавающей точкой
C++ Ifstream считать из файла числа с плавающей точкой

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.12.2012, 18:44     Точность числа с плавающей точкой #14
тип float выделяет в памяти под мантиссу 23 бит
Yandex
Объявления
05.12.2012, 18:44     Точность числа с плавающей точкой
Ответ Создать тему
Опции темы

Текущее время: 09:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru