math.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #include <LibC/assert.h>
  2. #include <LibM/math.h>
  3. extern "C" {
  4. double trunc(double x)
  5. {
  6. return (int)x;
  7. }
  8. double cos(double angle)
  9. {
  10. return sin(angle + M_PI_2);
  11. }
  12. double ampsin(double angle)
  13. {
  14. double looped_angle = fmod(M_PI + angle, M_TAU) - M_PI;
  15. double looped_angle_squared = looped_angle * looped_angle;
  16. double quadratic_term;
  17. if (looped_angle > 0) {
  18. quadratic_term = -looped_angle_squared;
  19. } else {
  20. quadratic_term = looped_angle_squared;
  21. }
  22. double linear_term = M_PI * looped_angle;
  23. return quadratic_term + linear_term;
  24. }
  25. double sin(double angle)
  26. {
  27. double vertical_scaling = M_PI_2 * M_PI_2;
  28. return ampsin(angle) / vertical_scaling;
  29. }
  30. double pow(double x, double y)
  31. {
  32. (void)x;
  33. (void)y;
  34. ASSERT_NOT_REACHED();
  35. }
  36. double ldexp(double, int exp)
  37. {
  38. (void)exp;
  39. ASSERT_NOT_REACHED();
  40. }
  41. double tanh(double)
  42. {
  43. ASSERT_NOT_REACHED();
  44. }
  45. double tan(double angle)
  46. {
  47. return ampsin(angle) / ampsin(M_PI_2 + angle);
  48. }
  49. double sqrt(double x)
  50. {
  51. double res;
  52. __asm__("fsqrt" : "=t"(res) : "0"(x));
  53. return res;
  54. }
  55. double sinh(double)
  56. {
  57. ASSERT_NOT_REACHED();
  58. }
  59. double log10(double)
  60. {
  61. ASSERT_NOT_REACHED();
  62. }
  63. double log(double)
  64. {
  65. ASSERT_NOT_REACHED();
  66. }
  67. double fmod(double index, double period)
  68. {
  69. return index - trunc(index / period) * period;
  70. }
  71. double exp(double)
  72. {
  73. ASSERT_NOT_REACHED();
  74. }
  75. double cosh(double)
  76. {
  77. ASSERT_NOT_REACHED();
  78. }
  79. double atan2(double, double)
  80. {
  81. ASSERT_NOT_REACHED();
  82. }
  83. double atan(double)
  84. {
  85. ASSERT_NOT_REACHED();
  86. }
  87. double asin(double)
  88. {
  89. ASSERT_NOT_REACHED();
  90. }
  91. double acos(double)
  92. {
  93. ASSERT_NOT_REACHED();
  94. }
  95. double fabs(double value)
  96. {
  97. return value < 0 ? -value : value;
  98. }
  99. double log2(double)
  100. {
  101. ASSERT_NOT_REACHED();
  102. }
  103. float log2f(float)
  104. {
  105. ASSERT_NOT_REACHED();
  106. }
  107. long double log2l(long double)
  108. {
  109. ASSERT_NOT_REACHED();
  110. }
  111. double frexp(double, int*)
  112. {
  113. ASSERT_NOT_REACHED();
  114. }
  115. float frexpf(float, int*)
  116. {
  117. ASSERT_NOT_REACHED();
  118. }
  119. long double frexpl(long double, int*)
  120. {
  121. ASSERT_NOT_REACHED();
  122. }
  123. }