Форум программистов, компьютерный форум, киберфорум
Информатика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/225: Рейтинг темы: голосов - 225, средняя оценка - 4.70
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131

Сложение чисел с плавающей запятой

04.02.2013, 03:39. Показов 42004. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Помогите разобраться в сложение чисел с плавающей точкой(IEEE754).

Например имеем число
0 0110 011001 и 0 0011 101000
Какой результат будет после сложения? И если можно, распишите все действия.

Заранее спасибо.

p.c упс, не с запятой, а точкой... floating point же)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.02.2013, 03:39
Ответы с готовыми решениями:

Сложение чисел с плавающей запятой
Помогите пожалуйста. Сложение чисел с плавающей запятой Ма= -0,111101 Ра= -011 Мв= -0,101101 Рв= 001

Сложение чисел в формате с плавающей запятой
Доброго времени суток! Есть два числа А=0.25 и В=-3 Нужно их перевести в двоичную систему в формате с плавающей запятой(дальше п.л.) и...

Произвести сложение X+Y и вычитание X-Y чисел с плавающей запятой
Представить заданные числа(125 и 10) с плавающей запятой в нормализованной форме одинарной точности. Произвести сложение X+Y и...

9
Модератор
10352 / 5638 / 3395
Регистрация: 17.08.2012
Сообщений: 17,205
04.02.2013, 05:13
Простите, но по IEEE754 самые короткие числа (с одинарной точностью) состоят из 32 битов, а не из 11, как у Вас. Вероятно, при написании задания у Вас закралась неточность... А вообще - в компьютере на это дело есть операции с плавающей точкой.

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

В Intel-X86-совместимых процессорах со встроенным арифметическим сопроцессором или в сопроцессоре Intel-X87, кроме всего прочего, числа перед операциями переводятся в 80-битовый "временный" формат для минимизации потери точности.

Так что требуется уточнение вопроса.
2
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131
05.02.2013, 01:04  [ТС]
Cyborg Drone, все верно написали. Да, число у меня с 11 битов, а все остальные это нули. В теории я знаю что нужно сравнить две мантиссы, после чего делаем что бы они обе были одинаковыми. И все последующие действия. То есть всю теорию по сути знаю (весь этот текст) но как это применить на практике - нет
По этому и прошу привести пример решения на заданных мною числах и если можно с объяснениями, может тогда пойму.
0
Модератор
10352 / 5638 / 3395
Регистрация: 17.08.2012
Сообщений: 17,205
05.02.2013, 18:59
Fareiro, опять получается нечто странное. Судите сами.

Вот хорошая ссылочка на стандарт IEEE754: http://www.softelectro.ru/ieee754.html

Прочитайте по ссылке §4 и §5. Прочитали? приступим.

Допустим, что Ваши числа с одинарной точностью:

00110011001000000000000000000000
00011101000000000000000000000000

Разбиваем числа на знак, порядок, мантиссу:

0 01100110 01000000000000000000000
0 00111010 00000000000000000000000

Сдвинутый порядок приводим к нормальному виду (вычитаем из него 12710=011111112, считая его 8-разрядным двоичным числом в дополнительном коде):

0 11100111 01000000000000000000000
0 10111011 00000000000000000000000

Мантиссы содержат только дробную часть, дополняем их целой частью (для нормализованного двоичного числа целая часть всегда =1, фактически - приписываем слева к мантиссе 1.):

0 11100111 1.01000000000000000000000
0 10111011 1.00000000000000000000000

Переводим для удобства в десятичную форму, ну а знак числа просто напишем (старший разряд =0, знак +), только для того, чтобы взглянуть, что за числа-то? :

+ -25 1.25
+ -69 1.00

Получается:

+1.25*2-25
+1.00*2-69

Вычитаем модули порядков

69-25=44

Далее нужно сдвинуть мантиссу второго числа (вместе с 1.) на 44 разряда вправо, скорректировать порядок второго числа (-69+44=-25 - порядки теперь равны) и дописать 44 незначащих нуля в мантиссу первого числа, затем сложить мантиссы и округлить получившийся результат до 24 значащих разрядов, затем, если целая часть мантиссы результата >1.02, нормализовать её, соответственно скорректировать порядок для результата (-25 минус количество разрядов, на которые сдвинули при нормализации), записать число

(знак) (порядок результата) (мантисса результата)

у мантиссы 1. стереть ластиком, к порядку прибавить 127 и... и всё. записать слитно, это и будет результат в IEEE754.

Неувязочка в том, что числа различаются более, чем на 24 двоичных порядка и, после сложения при округлении результат по-любому будет равен первому числу, у него порядок больше. Что за бессмысленное задание?

И, если эти числа представляют собой двоичные числа двойной точности по IEEE754, та же бяка получается: различие порядков там более, чем на 53 двоичных разряда:

0011001100100000000000000000000000000000 000000000000000000000000
0001110100000000000000000000000000000000 000000000000000000000000

0 01100110010 0000000000000000000000000000000000000000 000000000000
0 00111010000 0000000000000000000000000000000000000000 000000000000

0 11100110011 1.00000000000000000000000000000000000000 00000000000000
0 10111010001 1.00000000000000000000000000000000000000 00000000000000

+ -205 1.0
+ -559 1.0

559-205=354. Вот на столько вторую мантиссу двигать. Смысл умер.

Не по теме:

Пример с близкими порядками потом напишу - бежать на работу надо.



Добавлено через 7 часов 1 минуту
Я не рассматривал случая, когда нули спереди... Но тогда получается

0 00000000 00000000000000110011001
0 00000000 00000000000000011101000

Смещённый порядок равен нулю, мантисса не равна нулю. Опять бред. Это денормализованные числа по IEEE 754. Вряд ли препод такое задание даст. Разве чтоб поизгаляться.

Напишите числа целиком, не поленитесь.
0
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131
06.02.2013, 00:54  [ТС]
Это и было задание целиком.

Не по теме:

Dodaj liczby 0|0110|011001 i 0|0011|101000


Вот это и все задание

Добавлено через 41 минуту
Нашёл тут где-то в тетрадке, могут быть ошибки, по этому сразу извиняюсь)

x=23,25
Exp = 11 = 0 1011 011101
y=6,5
Exp = 9 = 0 1001 101000

Eyp = Exp + 1 = 10
My = 0, 110100

1011101
+
0011010
--------
1,11011

M = 1,11011

Z = 0 1011 110111
Z10 = 1, 100111*2^11-7 = 1,10011*2^4 = 29,75
0
Модератор
10352 / 5638 / 3395
Регистрация: 17.08.2012
Сообщений: 17,205
06.02.2013, 02:08
Цитата Сообщение от Fareiro Посмотреть сообщение
0|0110|011001, 0|0011|101000
0|0110|011001
0|0011|101000

Теперь почти ясно. Пробелы, что Вы в теме написали, не информативны, а вот штрихи... сразу понятно: знак|порядок|мантисса. IEEE 754, да не совсем. Скорее всего,

1. или учебный формат

+|6|25
+|3|40

это я его в десятичной форме написал,

2. или имеется ввиду

0|00000110|00000000000000000011001
0|00000011|00000000000000000101000

3. , хотя, может и

0|00000110|01100100000000000000000
0|00000011|10100000000000000000000

Ну да ладно. Изберём вариант 3, как наиболее реальный.

Определяем знак, восстанавливаем порядок (порядок=смещённый порядок-011111112), восстанавливаем мантиссу (приписываем слева 1.):

+|10000111|1.01100100000000000000000
+|10000100|1.10100000000000000000000

Чисто для себя напишу это в десятичном счислении. Необязательно это. Однако... сразу становится проще вычислять...

+1.390625*2-121
+1.625*2-124


Вычитаем порядки:

10000111
-
10000100
--------
00000011

Разница в порядках 112=310. Выравниваем порядки чисел:

+|10000100|1011.00100000000000000000
+|10000100|1.01100100000000000000000

Порядок промежуточного результата будет 100001002

(или вот так в данном случае проще, но не будем искать лёгких путей):

+|10000111|1.01100100000000000000000
+|10000111|0.00110100000000000000000000

Ещё для ясности десятичный пример:

1.234*10-5
5.678*10-7

...выравниваем...

123.4*10-7
5.678*10-7


Складываем мантиссы (совместив их по двоичной точке, как в школе учили), получаем промежуточный результат:

1011.00100000000000000000
0001.01100100000000000000000
----------------------------
1100.10000100000000000000000

Нормализуем и округляем мантиссу.

1.10010000100000000000000

Получилась окончательная мантисса.

точку пришлось сдвинуть на 3 разряда влево (умножили число на 23). Значит, к порядку промежуточного результата, чтобы получить окончательный результат, нужно прибавить 310=112.

10000100
+
00000011
--------
10000111

Приводим число к IEEE 754. Знак числа известен, иначе мы бы вместо сложения вычитанием занимались бы:

0

Вычисляем сдвинутый порядок, перенос в девятый разряд игнорируем:

10000111
+
01111111
--------
00000110

Из мантиссы выкидываем 1.:

10010000100000000000000

Окончательно

0|00000110|10010000100000000000000

без штрихов:

00000011010010000100000000000000

или в дурацкой нотации задания

0|0110|100100001

Может, где обсдался, проверьте вычисления.

Успехов.


Добавлено через 3 минуты

Не по теме:

Пока я ответ писал, и Вы не дремали... Получается, всё же учебный формат.



Добавлено через 7 минут

Не по теме:

Но в тетрадочке понятно, сейчас сделаю...

2
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131
06.02.2013, 02:09  [ТС]
Ohhh my god. Осталось со всем этим разобраться.
И как эти все расчеты представить в моем формате? Что-то башка совсем уже не варит.
0
Модератор
10352 / 5638 / 3395
Регистрация: 17.08.2012
Сообщений: 17,205
06.02.2013, 02:52

Не по теме:

Прям не задание, а шарада какая-то...


Числа записаны в условном псевдо-IEEE754 формате.
Знак числа|положительный порядок|мантисса без 1.

То есть,
Знак плюс
|..Порядок 01102=610
|..|....Мантисса = 1,0110012
|..|....|
V..V....V
0|0110|011001

Не по теме:

то есть, отрицательных порядков вообще не бывает... хе-хе... или это всё же знак порядка? Тогда отрицательных чисел не бывает...


0|0110|011001
0|0011|101000

Пишем знак, восстанавливаем мантиссу:

+|0110|1.011001 (= +1.390625*26 = 89)
+|0011|1.101000 (= +1.625000*23 = 13)

Вычитаем порядки:

0110
-
0011
----
0011

Разница 112=310. Выравниваем порядки. Сделаем, как удобнее. Скорректируем порядок нижнего числа, его мантиссу придётся ввиду этого сдвинуть на три разряда вправо:

+|0110|1.011001
+|0110|0.001101

Сложим мантиссы:

1.011001
+
0.001101
--------
1.100110

Мантисса нормализованная, значит, порядок будет тот, к которому выровняли. Пишем.

+|0110|1.100110 (= +1,59375*26 = 102 = 89+13 = всё верно)

Окончательно в дурацкой форме (пишем вместо плюса ноль, выкидываем 1.)

0|0110|10011

или так, чтоб шесть знаков за последней чертой:

0|0110|100110

Вот так вот получается.

Всего доброго.


Добавлено через 36 секунд

Не по теме:

Ну я ж говорил, ща напишу...

2
15 / 15 / 11
Регистрация: 06.12.2012
Сообщений: 131
06.02.2013, 18:31  [ТС]
Спасибо большое, вроде бы все понятно!!!

Добавлено через 15 часов 35 минут
Еще раз большое спасибо. Написал контрольную на 5!
0
07.02.2013, 22:00

Не по теме:

Рад за Вас!

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2013, 22:00
Помогаю со студенческими работами здесь

Сложение/Вычитание в дополнительном коде двоичные числа с плавающей запятой
0.1010011,100000 и 1.111010,010001 сложить и вычесть в допольнительном коде x+y x-y -x+y -x-y

Умножение двух чисел с плавающей запятой
Выполните умножение двух чисел с плавающей запятой в прямом коде (точность представления мантисс операндов и результата — 6 разрядов после...

Вычислить сумму чисел с плавающей запятой
Помогите пожалуйста решить задание. Нужно вычислить сумму чисел с плавающей запятой: S=A+B A=-0,010110*10^101 B= 0,101101*10^111

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

Выполнить операцию сложения чисел с плавающей запятой
выполнить операцию сложения чисел с плавающей запятой A1=112,12(10) A2=-21,10(10)


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru