Программирование синуса и косинуса в C более эффективно - PullRequest
0 голосов
/ 26 октября 2019

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

Но проблема, с которой я сейчас сталкиваюсь, заключается в том, что я могу рассчитать синус и косинус углов только в диапазоне от -90 ° до 90 ° (поэтому углы в первом и четвертом квадранте). Косинус (100) = Косинус (80) с отрицательным оператором. Поэтому мой способ мышления состоит в том, чтобы просто написать код, который всякий раз, когда он получает угол, который больше 90 и меньше 270, должен просто вычесть дополнительное значение из 90;поэтому в случае Cos (240) это будет то же самое, что и Cos (90-150) с перевернутым оператором в начале.

Как это сделать, не прибегая к написанию операторов 180-if?

#include <stdio.h>
#include <math.h>

int main() {

  double alpha[29];
  alpha[0] = 45.00000000;
  alpha[1] = 26.56505118;
  alpha[2] = 14.03624347;
  alpha[3] = 7.12501635;
  alpha[4] = 3.57633437;
  alpha[5] = 1.78991061;
  alpha[6] = 0.89517371;
  alpha[7] = 0.44761417;
  alpha[8] = 0.22381050;
  alpha[9] = 0.11190568;
  alpha[10] = 0.05595289;
  alpha[11] = 0.02797645;
  alpha[12] = 0.01398823;
  alpha[13] = 0.00699411;
  alpha[14] = 0.00349706;
  alpha[15] = 0.00174853;
  alpha[16] = 0.00087426;
  alpha[17] = 0.00043713;
  alpha[18] = 0.00021857;
  alpha[19] = 0.00010928;
  alpha[20] = 0.00005464;
  alpha[21] = 0.00002732;
  alpha[22] = 0.00001366;
  alpha[23] = 0.00000683;
  alpha[24] = 0.00000342;
  alpha[25] = 0.00000171;
  alpha[26] = 0.00000085;
  alpha[27] = 0.00000043;
  alpha[28] = 0.00000021;

  double x = 0.60725294;

  double y = 0;
  double winkel = -150;
  double theta = winkel;
  double xs;
  double ys;
  int i = 0;


  }
  while ( i < 29 ){

    printf("This is run number %d with theta = %lf \n", i, theta);
    xs = y / pow(2, i);  
    ys = x / pow(2, i);                              

    if (theta <= 0){
       x = x + xs;
       y = y - ys;
       theta = theta + alpha[i];
    } else {
      x = x - xs;
      y = y + ys;
      theta = theta - alpha[i];
    };
    printf("x = %lf   and   y = %lf \n \n",x,y);
    i++;
  }


  printf("cosine = %lf\n", x);
  printf("sine = %lf\n", y);
  return 0;

}

1 Ответ

1 голос
/ 26 октября 2019

cos (x) = cos (-x)

cos (x) = cos (x% 360), если x в градусах, а x положительный

этих тождеств должно быть достаточночтобы понять, что делать, верно?

аналогично sin (-x) = -sin (x)

sin (x) = sin (x% 360), если x в градусах, а x положительный

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