Цитата(Krjuger @ 17.03.2011 0:50)
Давайте я тогда уточню что в задании является главным.
Целью этой задачи является не само моделирование вычисления на ЭВМ,а изучение(сбор данных) того,как влияет на относительную погрешность количество разрядов мантисы,причем четких предписаний о том,как это делать нету.
Если честно, мне не совсем понятно, что тут изучать. В смысле, что изучать на компьютере. На мой взгляд, тут все прекрасно можно сказать и без него. Но, раз такое задание - значит, такое задание, и перечить я не собираюсь. А говорю это я только потому, что не понимаю, что ты имешь в виду дальше..
Цитата
Если я правильно понял,вы имеете ввиду то,что у нас есть число с 16 знаками после запятой( например) и разрядов мантисы 5,то мы просто откинем 11 последних чисел?
Если вы имели в виду это,то нет,это будет неправильным.
Meis pour quoi??
(только не
чисел все-таки, а
цифр, а еще точнее -
двоичных разрядов) Хорошо, смотрим твой пример..
Цитата
Я наверно приведу пример:
Допустим у нас есть число 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.1
10 в двоичную СС (надеюсь, правильно)) - и что? Ты просто хотел показать, как это делается, что ли? Ты правда думаешь, что мы тут не в курсе?
Короче, то ли ты забыл сделать вывод, который делал, то ли его просто, извини, нет..
Кхм.. А может, ты подумал, что я предлагаю занулять
десятичные разряды? и старался показать, что в двоичной СС это выглядит иначе?.. Эта гипотеза несколько проясняет твой монолог
. Но тогда имей в виду, что я говорил, конечно же, о
двоичных разрядах (а о чем еще можно вообще говорить, если речь идет о машинном представлении чисел??
)
Цитата
Самое первое,что приходит в голову это записывать все в одномерный массив с заданными параметрами,но что то мне подсказывает,что это далеко не лучшая идея и при вычислении машинного нуля, машинной бесконечности, машинного эпсилон будет происходить переполнение массива.
Можно и так, конечно. Но тогда (я думаю) тебе придется самому реализовать всю арифметику для таких чисел (если ты собираешься экспериментировать с точностью вычислений). Под "переполнением массива" (интересный термин)) ты, по-видимому, имел в виду возможный вынос единицы за разрядную сетку (переполнение _числа_, отсюда и твой термин)) и связанную с этим Range Check Error. Но с этим легко бороться простым добавлением лишнего разряда (как, собсно, и сделано на самом деле в реальных процессорах). Если использовать _уже_готовое_ представление действительных чисел (с обрезанием справа и учетом краевого эффекта), то арифметику писать не нужно - она тоже _уже_готова_.