//
// By drtimofey, script based on script by davidkpiano, see these links:
// https://github.com/thoughtbot/bitters/issues/167
// https://github.com/thoughtbot/bourbon/issues/717
// https://gist.github.com/davidkpiano/ad6e6771df050ff3727f
//

@import "divide-polyfill";

@function math-pow-polyfill($number, $exp) {
  $exp1: round($exp);
  $result: pow-int($number, $exp1);

  @if ($exp1 != $exp) {
    $result: $result * math-exp(($exp - $exp1) * math-ln($number));
  }

  @return $result;
}

@function pow-int($number, $exp) {
  @if $exp == 0 {
    @return 1;
  }
  @else if $exp < 0 {
    @return divide(1, pow-int($number, -$exp));
  }
  @else {
    $e: floor($exp * 0.5);
    $pow: math-pow-polyfill($number, $e);
    @if $e * 2 == $exp {
        @return $pow * $pow;
    } @else {
        @return $pow * $pow * $number;
    }
  }
}

@function math-exp($value) {
  $item: 1;
  $result: 1;

  @for $index from 1 to 100 {
    $item: divide($item * $value, $index);
    $result: $result + $item;
  }

  @return $result;
}

@function math-ln($value) {
  $ten-exp: 0;
  $ln-ten: 2.30258509;

  @while ($value > 1) {
    $ten-exp: $ten-exp + 1;
    $value: $value * 0.1;
  }

  $item: -1;
  $result: 0;

  @for $index from 1 to 100 {
    $item: $item * (1 - $value);
    $result: $result + divide($item, $index);
  }

  @return $result + $ten-exp * $ln-ten;
}
