exponentiate.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. 'use strict';
  2. // var isNegativeZero = require('math-intrinsics/isNegativeZero');
  3. var $pow = require('math-intrinsics/pow');
  4. var $TypeError = require('es-errors/type');
  5. /*
  6. var abs = require('math-intrinsics/abs');
  7. var isFinite = require('math-intrinsics/isFinite');
  8. var isNaN = require('math-intrinsics/isNaN');
  9. var IsInteger = require('math-intrinsics/isInteger');
  10. */
  11. // https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate
  12. /* eslint max-lines-per-function: 0, max-statements: 0 */
  13. module.exports = function NumberExponentiate(base, exponent) {
  14. if (typeof base !== 'number' || typeof exponent !== 'number') {
  15. throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be Numbers');
  16. }
  17. return $pow(base, exponent);
  18. /*
  19. if (isNaN(exponent)) {
  20. return NaN;
  21. }
  22. if (exponent === 0) {
  23. return 1;
  24. }
  25. if (isNaN(base)) {
  26. return NaN;
  27. }
  28. var aB = abs(base);
  29. if (aB > 1 && exponent === Infinity) {
  30. return Infinity;
  31. }
  32. if (aB > 1 && exponent === -Infinity) {
  33. return 0;
  34. }
  35. if (aB === 1 && (exponent === Infinity || exponent === -Infinity)) {
  36. return NaN;
  37. }
  38. if (aB < 1 && exponent === Infinity) {
  39. return +0;
  40. }
  41. if (aB < 1 && exponent === -Infinity) {
  42. return Infinity;
  43. }
  44. if (base === Infinity) {
  45. return exponent > 0 ? Infinity : 0;
  46. }
  47. if (base === -Infinity) {
  48. var isOdd = true;
  49. if (exponent > 0) {
  50. return isOdd ? -Infinity : Infinity;
  51. }
  52. return isOdd ? -0 : 0;
  53. }
  54. if (exponent > 0) {
  55. return isNegativeZero(base) ? Infinity : 0;
  56. }
  57. if (isNegativeZero(base)) {
  58. if (exponent > 0) {
  59. return isOdd ? -0 : 0;
  60. }
  61. return isOdd ? -Infinity : Infinity;
  62. }
  63. if (base < 0 && isFinite(base) && isFinite(exponent) && !IsInteger(exponent)) {
  64. return NaN;
  65. }
  66. */
  67. };