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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

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

  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;

}

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.