File: Calculator.c

package info (click to toggle)
xfireworks 1.3-16
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,036 kB
  • sloc: ansic: 6,896; makefile: 383; sh: 40
file content (54 lines) | stat: -rw-r--r-- 1,321 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "CalculatorP.h"

#include <math.h>

#ifndef M_PI
#define M_PI 3.14159265358979
#endif

#include "etc.h"

Calculator Calculator_Create(int degree_number)
{
  Calculator cal;
  int i;

  cal = (Calculator)malloc(sizeof(_Calculator));
  if (!cal) Error("Calculator_Create", "Cannot allocate memory.");

  cal->degree_number = degree_number;

  cal->sine = (double *)malloc(sizeof(double) * cal->degree_number);
  if (!cal->sine) Error("Calculator_Create", "Cannot allocate memory.");

  for (i = 0; i < cal->degree_number; i++) {
    cal->sine[i] = sin(i * (360.0 / cal->degree_number * M_PI / 180.0));
  }

  return (cal);
}

Calculator Calculator_Destroy(Calculator cal)
{
  if (!cal) return (NULL);
  if (cal->sine) free(cal->sine);
  free(cal);
  return (NULL);
}

double Calculator_GetSin(Calculator cal, int degree)
{
  while (degree < 0) degree += cal->degree_number;
  degree = degree % cal->degree_number;

  return (cal->sine[degree]);
}

double Calculator_GetCos(Calculator cal, int degree)
{
  return (Calculator_GetSin(cal, cal->degree_number / 4 - degree));
}

/*****************************************************************************/
/* End of Program                                                            */
/*****************************************************************************/