IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Вычисление с ограниченной разрядностью.
Krjuger
сообщение 16.03.2011 17:41
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Составить программу на алгоритмическом языке, моделирующую вычисления на ЭВМ с ограниченной разрядностью m. Используя эту программу найти значения машинного нуля, машинной бесконечности, машинного эпсилон . Составить график зависимости относительной погрешности от количества разрядов m= 4,5,…8.
Я собираюсь сделать эту зачаду на С++,но возникли проблемы на этапе разработки,а именно,у меня не совсем получается представить структуру.На сколько я понимаю,любое число в памяти представляется как 1 бит на знак +-,m разрядов идет мантиса,потом еще 1 бит на знак степени двойки,затем n-ое число разрядов,в которых храниться степерь двойки(p),а само число представляется в виде x=m*2p.
Насколько я понимаю погрешность будет появляться после того как число из нормального вида будет переводиться в вид,в котором оно храниться в памяти,а потом востанавливаться и сравниваться с исходным,так будет определяться погрешность.Проблемы возникли в том,как преобразовывать число в обе стороны,у меня даже дельных идей нету,так что буду рад хоть какой то идее,с более менее простой реализацией.

P.S. Забыл сказать,на входе может быть любое вещественное число.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Krjuger
сообщение 17.03.2011 0:50
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Давайте я тогда уточню что в задании является главным.
Целью этой задачи является не само моделирование вычисления на ЭВМ,а изучение(сбор данных) того,как влияет на относительную погрешность количество разрядов мантисы,причем четких предписаний о том,как это делать нету.
Цитата

можно просто обрезать обычное действительное число (занулить лишние разряды)?

Если я правильно понял,вы имеете ввиду то,что у нас есть число с 16 знаками после запятой( например) и разрядов мантисы 5,то мы просто откинем 11 последних чисел?
Если вы имели в виду это,то нет,это будет неправильным.
Я наверно приведу пример:
Допустим у нас есть число x=3.1 в десятичной системе.
Слачала мы переводим целую часть в двоичную систему,3=11,потом дробную 0.1=0.0(0011),как мы видим это число бесконечное.Дальше мы обьединяем целую и дробную части получаем 11.0001100110011 и тд,сдвигаем на 2 разряда,это будет равно 0.11000110011*210,число после точки и до множителя 2 и будет мантисой.Дальше в зависимости от разрядности ЭВМ мы записываем n-е количество цифр в мантису и наше число будет выглядеть как то так.
| |1|1|0|0|0|1|1|0|0|1|1| |0|0|.....|1|0|
первый пустой квадрат это знакчисла в нашем случае 0,дальше мантиса,я написал для разрядности 11,дальше знак экспоненты и дальше уже сама степень.
Насчет того как расположены знаки мантисы и экспонены,я не знаю точно,в лекциях давали так,как я написал, TarasBer сказал ,что по другому,чья истина,я не знаю.

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

Самое первое,что приходит в голову это записывать все в одномерный массив с заданными параметрами,но что то мне подсказывает,что это далеко не лучшая идея и при вычислении машинного нуля, машинной бесконечности, машинного эпсилон будет происходить переполнение массива.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 17.03.2011 5:40
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Krjuger @ 17.03.2011 0:50) *
Давайте я тогда уточню что в задании является главным.
Целью этой задачи является не само моделирование вычисления на ЭВМ,а изучение(сбор данных) того,как влияет на относительную погрешность количество разрядов мантисы,причем четких предписаний о том,как это делать нету.
Если честно, мне не совсем понятно, что тут изучать. В смысле, что изучать на компьютере. На мой взгляд, тут все прекрасно можно сказать и без него. Но, раз такое задание - значит, такое задание, и перечить я не собираюсь. А говорю это я только потому, что не понимаю, что ты имешь в виду дальше..

Цитата
Если я правильно понял,вы имеете ввиду то,что у нас есть число с 16 знаками после запятой( например) и разрядов мантисы 5,то мы просто откинем 11 последних чисел?
Если вы имели в виду это,то нет,это будет неправильным.
Meis pour quoi?? blink.gif (только не чисел все-таки, а цифр, а еще точнее - двоичных разрядов) Хорошо, смотрим твой пример..

Цитата
Я наверно приведу пример:
Допустим у нас есть число x=3.1 в десятичной системе.
Слачала мы переводим целую часть в двоичную систему,3=11,потом дробную 0.1=0.0(0011),как мы видим это число бесконечное.Дальше мы обьединяем целую и дробную части получаем 11.0001100110011 и тд,сдвигаем на 2 разряда,это будет равно 0.11000110011*210,число после точки и до множителя 2 и будет мантисой.Дальше в зависимости от разрядности ЭВМ мы записываем n-е количество цифр в мантису и наше число будет выглядеть как то так.
| |1|1|0|0|0|1|1|0|0|1|1| |0|0|.....|1|0|
первый пустой квадрат это знакчисла в нашем случае 0,дальше мантиса,я написал для разрядности 11,дальше знак экспоненты и дальше уже сама степень.
Насчет того как расположены знаки мантисы и экспонены,я не знаю точно,в лекциях давали так,как я написал, TarasBer сказал ,что по другому,чья истина,я не знаю.
В общем,получив такое разложение числа,мы его потом опять преобразуем в исходный вид и потом сравниваем их.
Иии.... что? Ну, перевел ты 3.110 в двоичную СС (надеюсь, правильно)) - и что? Ты просто хотел показать, как это делается, что ли? Ты правда думаешь, что мы тут не в курсе? smile.gif
Короче, то ли ты забыл сделать вывод, который делал, то ли его просто, извини, нет..

Кхм.. А может, ты подумал, что я предлагаю занулять десятичные разряды? и старался показать, что в двоичной СС это выглядит иначе?.. Эта гипотеза несколько проясняет твой монолог smile.gif. Но тогда имей в виду, что я говорил, конечно же, о двоичных разрядах (а о чем еще можно вообще говорить, если речь идет о машинном представлении чисел?? blink.gif )

Цитата
Самое первое,что приходит в голову это записывать все в одномерный массив с заданными параметрами,но что то мне подсказывает,что это далеко не лучшая идея и при вычислении машинного нуля, машинной бесконечности, машинного эпсилон будет происходить переполнение массива.
Можно и так, конечно. Но тогда (я думаю) тебе придется самому реализовать всю арифметику для таких чисел (если ты собираешься экспериментировать с точностью вычислений). Под "переполнением массива" (интересный термин)) ты, по-видимому, имел в виду возможный вынос единицы за разрядную сетку (переполнение _числа_, отсюда и твой термин)) и связанную с этим Range Check Error. Но с этим легко бороться простым добавлением лишнего разряда (как, собсно, и сделано на самом деле в реальных процессорах). Если использовать _уже_готовое_ представление действительных чисел (с обрезанием справа и учетом краевого эффекта), то арифметику писать не нужно - она тоже _уже_готова_.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Krjuger   Вычисление с ограниченной разрядностью.   16.03.2011 17:41
TarasBer   > любое число Только вещественное с плавающей ...   16.03.2011 18:48
Krjuger   Спасибо за ваш коментарий.Из всего, что вы написал...   16.03.2011 21:37
Lapp   для меня несколько важнее другой вопрос....а именн...   16.03.2011 22:17
Krjuger   Давайте я тогда уточню что в задании является глав...   17.03.2011 0:50
Lapp   Давайте я тогда уточню что в задании является глав...   17.03.2011 5:40
andriano   Если я правильно понял,вы имеете ввиду то,что у н...   18.03.2011 23:52
TarasBer   > а изучение(сбор данных) того,как влияет на от...   17.03.2011 13:24
Lapp   Я правильно понимаю, что тебе достаточно разобрать...   17.03.2011 14:38
TarasBer   Ну тогда пусть вычисления ведёт для long long floa...   17.03.2011 14:58
Krjuger   Если чесно, сам предмет связан с программирование...   17.03.2011 20:25
TarasBer   А, это long double называется, короче 80-разрядный...   17.03.2011 21:51
Гость   > Но воспользовавшись кодом TarasBer я получил ...   19.03.2011 11:16


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 20:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"