Skip to content

Commit

Permalink
feat: added new math functions
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinAlavik committed Oct 14, 2023
1 parent e597af2 commit 7aac5f3
Showing 1 changed file with 64 additions and 1 deletion.
65 changes: 64 additions & 1 deletion src/runtime/intrinsics/libs/std/math.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export default class MathLib extends Intrinsic.Lib {
public get propertyTypes(): Record<string, Type> {
return {
pi: new SingularType("float"),
e: new SingularType("float")
e: new SingularType("float"),
};
}

Expand Down Expand Up @@ -88,6 +88,69 @@ export default class MathLib extends Intrinsic.Lib {
public call(n: number): number {
return Math.tanh(n);
}
},
abs: class Abs extends Intrinsic.Function {
public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`;
public readonly returnType = NUMBER_TYPE;
public readonly argumentTypes = { n: NUMBER_TYPE };

public call(n: number): number {
return Math.abs(n);
}
},
sqrt: class Sqrt extends Intrinsic.Function {
public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`;
public readonly returnType = NUMBER_TYPE;
public readonly argumentTypes = { n: NUMBER_TYPE };

public call(n: number): number {
return Math.sqrt(n);
}
},
exp: class Exp extends Intrinsic.Function {
public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`;
public readonly returnType = NUMBER_TYPE;
public readonly argumentTypes = { n: NUMBER_TYPE };

public call(n: number): number {
return Math.exp(n);
}
},
log: class Log extends Intrinsic.Function {
public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`;
public readonly returnType = NUMBER_TYPE;
public readonly argumentTypes = { n: NUMBER_TYPE, base: NUMBER_TYPE };

public call(n: number, base: number): number {
return Math.log(n) / Math.log(base);
}
},
ceil: class Ceil extends Intrinsic.Function {
public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`;
public readonly returnType = NUMBER_TYPE;
public readonly argumentTypes = { n: NUMBER_TYPE };

public call(n: number): number {
return Math.ceil(n);
}
},
floor: class Floor extends Intrinsic.Function {
public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`;
public readonly returnType = NUMBER_TYPE;
public readonly argumentTypes = { n: NUMBER_TYPE };

public call(n: number): number {
return Math.floor(n);
}
},
pow: class Pow extends Intrinsic.Function {
public readonly name = `${libName}.${toCamelCase(this.constructor.name)}`;
public readonly returnType = NUMBER_TYPE;
public readonly argumentTypes = { base: NUMBER_TYPE, exp: NUMBER_TYPE };

public call(base: number, exp: number): number {
return Math.pow(base, exp);
}
}
};
}
Expand Down

0 comments on commit 7aac5f3

Please sign in to comment.