@use 'sass:math'

$PI: 3.14159265359

@function pow($number, $exp)
  $value: 1
  @if $exp > 0
    @for $i from 1 through $exp
      $value: $value * $number
  @else if $exp < 0
    @for $i from 1 through -$exp
      $value: $value / $number
  @return $value

@function fact($number)
  $value: 1
  @if $number > 0
    @for $i from 1 through $number
      $value: $value * $i
  @return $value

// round to number of decimals
// toFixed(0.12345, 100) -> 0.12
// toFixed(0.12345, 1000) -> 0.123
@function toFixed($number, $power)
  @return math.div(math.round($number * $power), $power)

@function sin($angle)
  $sin: 0
  // angle -> radians
  $rad: math.div($angle, 180) * $PI
  // interval determines precision
  @for $i from 0 through 25
    $sin: $sin + math.div(pow(-1, $i) * pow($rad, (2 * $i + 1)), fact(2 * $i + 1))
  @return $sin

@function cos($angle)
  $cos: 0
  // angle -> radians
  $rad: math.div($angle, 180) * $PI
  // interval determines precision
  @for $i from 0 through 25
    $cos: $cos + math.div(pow(-1, $i) * pow($rad, 2 * $i), fact(2 * $i))
  @return $cos
