Объяснения ошибки infinity – верхней грани. Нахождение косинуса минимального угла. Нахождение достаточного для вычислений количества цифр числа "пи"

Страницы работы

Содержание работы

Выводы по исследованиям:

  1. Объяснения ошибки infinityверхней грани:

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

 

 - искомая степень (положительная)

  1. Объяснения нижней грани:

Аналогично 1), но за счет того, что мантисса может быть представлена в ненормализованном виде (т.е. старший бит равен 0), преобразование идет другим образом. Расширяя значение порядка мантиссы, уменьшается точность (обнуляются числа мантиссы). Это смещение возможно на 23 позиции. Тогда:

 - искомая степень (отрицательная)

  1. Нахождение косинуса минимального угла.

Число 0.013988227117806674 – число типа DUBBLE, этим объясняется количество значащих цифр. Приведение к типу DUBBLE – инициатива компилятора, возможно, нарушение спецификации FORTRAN77, т.к. переменные, объявленные неявно, не могут быть типы DUBBLE.

Косинусы углов, меньших. 0.013988227117806674, функцией cos() будут равны 1.

Из разложения cos(x) в ряд, имеем:

Пусть х=0.0139. Тогда:

Т.е. слагаемые ряда убывают слишком быстро, чтобы повлиять на переменную типа REAL, поэтому результат равен 1.

            Рассмотрим ряд sin(x):

Слагаемые ряда сходятся быстрее, чем у косинуса, но за счет sin(x)=x-…, результат будет отличен от нуля до тех пор, пока угл в представлении в памяти будет отличен от 0.

При переходе от sin() к cos() были использованы следующие соотношения:

Ни одно из них не изменило значение cos(x)=1.

Таким образом, единственное решение – это расширить диапазон значений, использую переменные типа REAL*8 (вычисление по теореме косинусов не дает большого результат, т.к. при данных входных данных промежуточных вычислении слишком много и потеря точности приводит вновь к cos(x)=1)

  1. Нахождение достаточного для вычислений количества цифр числа .

Для исследования мы последовательно переводили (программа прилагается) число  с разным количеством значащих цифр в двоичный код и сравнивали результат:

3.14159

11.00100100001111110011110

3.141592

11.00100100001111110101111

3.1415926

11.00100100001111110110100

3.14159265

11.00100100001111110110101

3.141592653

11.00100100001111110110101

После 3.14159265 мантисса не меняется, а, значит, не влияет на вычисления. Значит, этого достаточно для вычислений.

Программа перевода чисел в двоичную систему счисления:

#include <stdio.h>

int main(int argc, char *argv[])

{

int mx[23],i;

float f;

scanf("%f",&f);

 for(i=0;i<23;i++)

  {

   f=f*2;

    if(f>1) {f-=1; mx[i]=1;} else mx[i]=0;

  }

 for(i=0;i<23;i++)

  printf("%d",mx[i]);

return 0;

}

Похожие материалы

Информация о работе