f7
f7 is a spreadsheet formula execution library
git clone https://git.vogt.world/f7.git
Log | Files | README.md | LICENSE.md
← All files
name: src/main/js/formulas/math/POW.ts
-rw-r--r--
1236
 1import { F7Exception } from "../../errors/F7Exception";
 2import { NumException } from "../../errors/NumException";
 3import { SheetColumnRowKey } from "../../models/common/SheetColumnRowKey";
 4import { Complex } from "../../models/common/Types";
 5import { Converters } from "../../utils/Converters";
 6import { AbstractFormula } from "../AbstractFormula";
 7import { FormulaName } from "../FormulaName";
 8
 9export class POW extends AbstractFormula {
10  static SELF: POW = new POW();
11  NAME = FormulaName.POW;
12
13  internal(origin: SheetColumnRowKey, ...values: Array<Complex>) {
14    AbstractFormula.checkLength(values.length, 2, this.NAME);
15    const first = Converters.first(this.collateralLookup(origin, values[0]));
16    const second = Converters.first(this.collateralLookup(origin, values[1]));
17    if (first instanceof F7Exception) {
18      return first;
19    }
20    if (second instanceof F7Exception) {
21      return second;
22    }
23    const firstNumber = Converters.toNumber(first);
24    const secondNumber = Converters.toNumber(second);
25    const result = Math.pow(firstNumber, secondNumber);
26    if (isNaN(result) || !Number.isFinite(result)) {
27      return new NumException("POW evaluates to an imaginary number.");
28    }
29    return result;
30  }
31}