linalg_hlsl_math.odin 5.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package math_linalg_hlsl
  2. import "core:math"
  3. @(require_results) cos_float :: proc "c" (x: float) -> float { return math.cos(x) }
  4. @(require_results) sin_float :: proc "c" (x: float) -> float { return math.sin(x) }
  5. @(require_results) tan_float :: proc "c" (x: float) -> float { return math.tan(x) }
  6. @(require_results) acos_float :: proc "c" (x: float) -> float { return math.acos(x) }
  7. @(require_results) asin_float :: proc "c" (x: float) -> float { return math.asin(x) }
  8. @(require_results) atan_float :: proc "c" (x: float) -> float { return math.atan(x) }
  9. @(require_results) atan2_float :: proc "c" (y, x: float) -> float { return math.atan2(y, x) }
  10. @(require_results) cosh_float :: proc "c" (x: float) -> float { return math.cosh(x) }
  11. @(require_results) sinh_float :: proc "c" (x: float) -> float { return math.sinh(x) }
  12. @(require_results) tanh_float :: proc "c" (x: float) -> float { return math.tanh(x) }
  13. @(require_results) acosh_float :: proc "c" (x: float) -> float { return math.acosh(x) }
  14. @(require_results) asinh_float :: proc "c" (x: float) -> float { return math.asinh(x) }
  15. @(require_results) atanh_float :: proc "c" (x: float) -> float { return math.atanh(x) }
  16. @(require_results) sqrt_float :: proc "c" (x: float) -> float { return math.sqrt(x) }
  17. @(require_results) rsqrt_float :: proc "c" (x: float) -> float { return 1.0/math.sqrt(x) }
  18. @(require_results) rcp_float :: proc "c" (x: float) -> float { return 1.0/x }
  19. @(require_results) pow_float :: proc "c" (x, y: float) -> float { return math.pow(x, y) }
  20. @(require_results) exp_float :: proc "c" (x: float) -> float { return math.exp(x) }
  21. @(require_results) log_float :: proc "c" (x: float) -> float { return math.ln(x) }
  22. @(require_results) log2_float :: proc "c" (x: float) -> float { return math.log(x, 2) }
  23. @(require_results) log10_float :: proc "c" (x: float) -> float { return math.log(x, 10) }
  24. @(require_results) exp2_float :: proc "c" (x: float) -> float { return math.pow(float(2), x) }
  25. @(require_results) sign_float :: proc "c" (x: float) -> float { return math.sign(x) }
  26. @(require_results) floor_float :: proc "c" (x: float) -> float { return math.floor(x) }
  27. @(require_results) round_float :: proc "c" (x: float) -> float { return math.round(x) }
  28. @(require_results) ceil_float :: proc "c" (x: float) -> float { return math.ceil(x) }
  29. @(require_results) isnan_float :: proc "c" (x: float) -> bool { return math.classify(x) == .NaN}
  30. @(require_results) fmod_float :: proc "c" (x, y: float) -> float { return math.mod(x, y) }
  31. @(require_results)
  32. frac_float :: proc "c" (x: float) -> float {
  33. if x >= 0 {
  34. return x - math.trunc(x)
  35. }
  36. return math.trunc(-x) + x
  37. }
  38. @(require_results) cos_double :: proc "c" (x: double) -> double { return math.cos(x) }
  39. @(require_results) sin_double :: proc "c" (x: double) -> double { return math.sin(x) }
  40. @(require_results) tan_double :: proc "c" (x: double) -> double { return math.tan(x) }
  41. @(require_results) acos_double :: proc "c" (x: double) -> double { return math.acos(x) }
  42. @(require_results) asin_double :: proc "c" (x: double) -> double { return math.asin(x) }
  43. @(require_results) atan_double :: proc "c" (x: double) -> double { return math.atan(x) }
  44. @(require_results) atan2_double :: proc "c" (y, x: double) -> double { return math.atan2(y, x) }
  45. @(require_results) cosh_double :: proc "c" (x: double) -> double { return math.cosh(x) }
  46. @(require_results) sinh_double :: proc "c" (x: double) -> double { return math.sinh(x) }
  47. @(require_results) tanh_double :: proc "c" (x: double) -> double { return math.tanh(x) }
  48. @(require_results) acosh_double :: proc "c" (x: double) -> double { return math.acosh(x) }
  49. @(require_results) asinh_double :: proc "c" (x: double) -> double { return math.asinh(x) }
  50. @(require_results) atanh_double :: proc "c" (x: double) -> double { return math.atanh(x) }
  51. @(require_results) sqrt_double :: proc "c" (x: double) -> double { return math.sqrt(x) }
  52. @(require_results) rsqrt_double :: proc "c" (x: double) -> double { return 1.0/math.sqrt(x) }
  53. @(require_results) rcp_double :: proc "c" (x: double) -> double { return 1.0/x }
  54. @(require_results) pow_double :: proc "c" (x, y: double) -> double { return math.pow(x, y) }
  55. @(require_results) exp_double :: proc "c" (x: double) -> double { return math.exp(x) }
  56. @(require_results) log_double :: proc "c" (x: double) -> double { return math.ln(x) }
  57. @(require_results) log2_double :: proc "c" (x: double) -> double { return math.log(x, 2) }
  58. @(require_results) log10_double :: proc "c" (x: double) -> double { return math.log(x, 10) }
  59. @(require_results) exp2_double :: proc "c" (x: double) -> double { return math.pow(double(2), x) }
  60. @(require_results) sign_double :: proc "c" (x: double) -> double { return math.sign(x) }
  61. @(require_results) floor_double :: proc "c" (x: double) -> double { return math.floor(x) }
  62. @(require_results) round_double :: proc "c" (x: double) -> double { return math.round(x) }
  63. @(require_results) ceil_double :: proc "c" (x: double) -> double { return math.ceil(x) }
  64. @(require_results) isnan_double :: proc "c" (x: double) -> bool { return math.classify(x) == .NaN}
  65. @(require_results) fmod_double :: proc "c" (x, y: double) -> double { return math.mod(x, y) }
  66. @(require_results)
  67. frac_double :: proc "c" (x: double) -> double {
  68. if x >= 0 {
  69. return x - math.trunc(x)
  70. }
  71. return math.trunc(-x) + x
  72. }