Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <cmath>
- namespace Math {
- #define MATH_PI_025 0.785375
- #define MATH_PI_05 1.57075
- #define MATH_PI 3.1415
- #define MATH_PI_15 4.71225
- #define MATH_PI_2 6.283
- double abs(double a) {
- if(a < 0)
- return -a;
- return a;
- }
- double sin(double a) {
- a = abs(a);
- while(a > MATH_PI_2)
- a -= MATH_PI_2;
- //We map sin to first quadrant.
- bool minAttached = false;
- if(a > MATH_PI_15) {
- a = MATH_PI_2 - a;
- minAttached = true;
- }
- else if(a > MATH_PI) {
- a = a - MATH_PI;
- minAttached = true;
- }
- else if(a > MATH_PI_05)
- a = a - 2 * (a - MATH_PI_05);
- //Its accurate only to 45 deg
- if(a > MATH_PI_025)
- return cos(MATH_PI_05 - a);
- //Polynomal
- double result = a - ((a * a * a) / 6) + ((a * a * a * a * a) / 120);
- if(minAttached)
- return -result;
- return result;
- }
- double cos(double a) {
- a = abs(a);
- while(a > MATH_PI_2)
- a -= MATH_PI_2;
- //We map sin to first quadrant.
- bool minAttached = false;
- if(a > MATH_PI_15)
- a = MATH_PI_2 - a;
- else if(a > MATH_PI) {
- a = a - MATH_PI;
- minAttached = true;
- }
- else if(a > MATH_PI_05) {
- a = a - 2 * (a - MATH_PI_05);
- minAttached = true;
- }
- //It's accurate only to 45 deg
- if(a > MATH_PI_025)
- return sin(MATH_PI_05 - a);
- //Polynomal
- double result = 1 - ((a * a) / 2) + ((a * a * a * a) / 24) - ((a * a * a * a * a * a) / 720);
- if(minAttached)
- return -result;
- return result;
- }
- double sqrt(double a)
- {
- }
- }
- int main(void)
- {
- std::cout << std::fixed << std::setprecision(8) << std::sin(MATH_PI) << " : " << Math::sin(MATH_PI) << std::endl;
- std::cout << std::fixed << std::setprecision(8) << std::sin(MATH_PI * 2) << " : " << Math::sin(MATH_PI * 2) << std::endl;
- std::cout << std::fixed << std::setprecision(8) << std::sin(MATH_PI * 0.45664) << " : " << Math::sin(MATH_PI * 0.45664) << std::endl;
- std::cout << std::fixed << std::setprecision(8) << std::cos(MATH_PI) << " : " << Math::cos(MATH_PI) << std::endl;
- std::cout << std::fixed << std::setprecision(8) << std::cos(MATH_PI * 2) << " : " << Math::cos(MATH_PI * 2) << std::endl;
- std::cout << std::fixed << std::setprecision(8) << std::cos(MATH_PI * 0.45664) << " : " << Math::cos(MATH_PI * 0.45664) << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement