Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1

Реализовать класс чисел с плавающей точкой

01.03.2015, 20:06. Показов 4896. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Интересует такой вопрос,как реально можно реализовать класс чисел с плавающей точкой.
Какие поля использовать?Как представить вещественное число допустим 5.25 в таком формате:
https://www.cyberforum.ru/cgi-bin/latex.cgi?(S)*1.M*{2}^{E}
Где S-знак,M мантисса в пределах [0,1] (наверное),2- основание,E порядок.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.03.2015, 20:06
Ответы с готовыми решениями:

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

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

Число с плавающей точкой в памяти компьютера
Доброго времен суток, извиняюсь, если попал не в тот раздел :( Итак, возник вопрос, как хранится число с плавающей точкой в памяти...

32
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.03.2015, 09:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Вернее, два типа на выбор - одинарной и двойной точности.
Три. float, double и long double. Но его ведь может интересовать кросразработка для машины без арифметического сопроцессора, или реализация типа четверной, или половинной точности. Или праздный интерес на тему "как это делают разработчики процессоров".
0
3140 / 1741 / 274
Регистрация: 19.02.2010
Сообщений: 4,546
18.03.2015, 22:17
Цитата Сообщение от taras atavin Посмотреть сообщение
Три. float, double и long double.
Давайте таки не учитывать вымерших или почти вымерших мамонтов - а только перспективные архитектуры. На x64 и на GPU - long double уже не реализован. Да и double не на каждой видяхе - а только на дорогих.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.03.2015, 14:04
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Давайте таки не учитывать вымерших или почти вымерших мамонтов - а только перспективные архитектуры. На x64 и на GPU - long double уже не реализован.



Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Да и double не на каждой видяхе
Дабл вообще то не на видяхе.
0
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
25.03.2015, 18:43  [ТС]
Цитата Сообщение от wingblack Посмотреть сообщение
Например,
Подскажите пожалуйста!Если я допустим хочу попробовать в роли основания,не 10 или 2,а допустим число 3.
т.е. такой вид https://www.cyberforum.ru/cgi-bin/latex.cgi?{(-1)}^{S}*M*{3}^{E}
Как представить мантиссу лучше?
Как приводить к одному порядку тогда??
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
26.03.2015, 10:29
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Как представить мантиссу лучше?
Точно также, вида m0.m1m2m3.... где mi - цифры системы счисления, m0 не равно нулю.
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Как приводить к одному порядку тогда??
Мантиссу числа с меньшим порядком делить на 3 (прибавляя по 1 к порядку после каждого шага) пока порядок основания не сравняется.
1
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
26.03.2015, 18:43  [ТС]
Цитата Сообщение от wingblack Посмотреть сообщение
Точно также, вида m0.m1m2m3.... где mi - цифры системы счисления, m0 не равно нулю.
1.Можно ли на примере увидеть это?(Простой какой-нибудь пример сложения двух чисел)
2.То есть основание определяет систему счисления мантиссы к тому же?Или я не так понял?
3.А как вообще перейти от числа допустим 1.253 к числу с основанием 3,т.е. https://www.cyberforum.ru/cgi-bin/latex.cgi?M*{3}^{E} чтобы они равны были?
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.03.2015, 18:52
Ни одна десятичная дробь не имеет точного троичного представления. И двигать точку до целой мантиссы не поможет, так как получишь множитель, являющийся отрицательной степенью десяти, а это тоже десятичная дробь. Точно двоичное представление тоже есть не всегда, а конкретно степени десяти с целыми отрицательными показателями ни одна не имеет точного двоичного представления.
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
30.03.2015, 14:01
Цитата Сообщение от DmitryM5 Посмотреть сообщение
2.То есть основание определяет систему счисления мантиссы к тому же?Или я не так понял?
Гораздо проще, когда система счисления мантиссы совпадает с основанием. Тогда приведение к общему порядку не требует значительных вычислений - производится просто сдвиг цифр числа (конечно, если мы храним каждую цифру в отдельной ячейке памяти, а не по несколько цифр в одном блоке памяти, но и тут тоже проще иметь ту же систему счисления - чтобы можно было сдвигать сразу блок цифр). Иначе потребуется именно делить мантиссу на основание. Да и (мне) проще рассуждать когда системы счислений совпадают. А так, если хотите - используйте разные системы счисления.
Цитата Сообщение от DmitryM5 Посмотреть сообщение
3.А как вообще перейти от числа допустим 1.253 к числу с основанием 3?
Попытаться перезаписать число как сумму степеней тройки с коэффициентами из 3-чной системы счисления
1,253 = 1*30 + 0,253 = 1*30 + 0*3-1 + 0,253 =1*30 + 0*3-1 + 2*3-2 +0,030(7)
и так далее, пока не заполним все цифры в мантиссе, поскольку данное число на 3 нацело не делится.

Добавлено через 7 минут
получим 1.012.. *30
1
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
30.03.2015, 19:08  [ТС]
Цитата Сообщение от DmitryM5 Посмотреть сообщение
1.Можно ли на примере увидеть это?(Простой какой-нибудь пример сложения двух чисел)
1 пункт все так остался у меня под вопросом.
Считаем вот так https://www.cyberforum.ru/cgi-bin/latex.cgi?(-1)*{M}_{3}*{3}^{E}
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
31.03.2015, 09:19
Цитата Сообщение от DmitryM5 Посмотреть сообщение
1 пункт все так остался у меня под вопросом.
Думаю, что отвечая на вопрос (3) я также частично ответил и на (1).
Если мантисса и основание в 3-чной системе счисления, то, как обычно, раскладываем число по степеням тройки с коэффициентами меньше 3-х.
https://www.cyberforum.ru/cgi-bin/latex.cgi?N = {(-1)}^{w}*\sum {A}_{k}*{3}^{k} w = 0 или 1, 0 <= Ak < 3
пусть число
34.56
длиннотекст

начнем с 3-й степени, это 4-я цифра перед запятой (в троичной системе счисления)
33=27
34.56 - 1*27 = 7,56
1???.???

32=9
больше чем оставшееся число
7,56 - 0*9 = 7,56
10??.???

31=3
2*31=6
7,56 - 2*3 = 1,56
102?.???

30=1
1,56 - 1 = 0,56
1021.???
3-1=1/3=0,(3)
0,56 - 1/3 = 0,22(6)

1021.1??
3-2=1/9=0,11(1)
2*3-2=0,22(2)
0,22(6) - 2/9 = 0,00(4)

1021,12?
3-3=1/27=0,037(037)
больше чем последнее число
0,00(4) - 0/27 = 0,00(4)
1021,120

и так далее
Конечно же, после запятой бесконечное количество цифр, но пусть у нас вот такая маленькая мантисса что вмещается только 7 цифр
Возможно я выбрал не самый удачный метод разложения, можно было просто делить оставшееся число на очередную степень тройки чтобы целая часть результата была от 0 до 2, брать целую часть в качестве очередной цифры и переходить к меньшей степень тройки.

Получим
(-1)0*1021,120*30
делаем сдвиг - делим число на 1000 в троичной системе (т.е. на 33) и прибавляем 3 к порядку степени, получим

(-1)0*1,021120*33
1
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
31.03.2015, 16:43  [ТС]
Цитата Сообщение от wingblack Посмотреть сообщение
(-1)0*1,021120*33
Спасибо конечно огромное,с этим тоже немного прояснилось.Но вопрос был про операцию сложения двух чисел.
То есть допустим у нас разные порядки,как произвести выравнивание.
И к тому же я орудую только целыми числами,откуда запятую я возьму https://www.cyberforum.ru/cgi-bin/latex.cgi?1,021120*{3}^{3} ?)
0
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
01.04.2015, 08:38
Цитата Сообщение от DmitryM5 Посмотреть сообщение
И к тому же я орудую только целыми числами,откуда запятую я возьму
Если внимательно просмотреть на картинки к нормальзированной форме мантиссы, то там видно, что первая цифра в мантиссе считается стоящей слева от запятой, остальные справа. Точнее, считается что первое число в мантиссе - всегда 1, а поскольку это единственная "значащая" цифра в двоичной системе счисления, то в стандарте первая цифра даже не сохраняется в мантиссе (зачем хранить, если и так известно что первой всегда стоит единица ?)

Цитата Сообщение от DmitryM5 Посмотреть сообщение
Но вопрос был про операцию сложения двух чисел.
мне казалось что операцию сложения мы уже рассмотрели
Кликните здесь для просмотра всего текста

1)1,021120*33
2)1,021120*31 = 0,102112*32 = 0,010211*33
Т.е. отбрасываем то что не помещается в мантиссу
Теперь складываем.
1,021120
0,010211
---------
1,102101

получили
1,102101*33

Прошу заметить как удобно когда система счисления степени и мантиссы совпадают - просто сдвигаем запятую вместо операций деления.
0
0 / 0 / 0
Регистрация: 07.05.2015
Сообщений: 1
09.05.2015, 13:08
DmitryM5, Здравствуйте, у вас не осталось кода по этой теме?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.05.2015, 13:08

Как выглядит число с плавающей точкой в 2й системе?
Если цифра выглядит как Тогда как будет выглядеть: ? Пробовал в файл записать и посмотреть Hex Edit'ом, в обоих случаях ...

Преобразование 64-битного числа в число с плавающей точкой
Доброго всем времени суток! Суть вопроса: Не могу придумать алгоритм преобразования 64-битного числа (последовательность из 8-ми байт)...

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

Класс : Число с плавающей запятой(точкой)
Подскажите,где можно побольше узнать о числах с плавающей запятой,желательно не теоретическую часть,а программную. У меня задания...

Добавить в класс возможность вычисления значенний с плавающей точкой
Есть код программи , надо добавить в него возможность считать не только целие числа, а й реальние. Как разобрать строку ? Чтоб получились...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru