core; num; add exp & log2

I've had a couple use cases in time that the code is significantly clearer with these, and makes porting less error prone
This commit is contained in:
underscorediscovery
2020-07-10 19:38:45 -07:00
parent 0e8d56f874
commit 433fbc4019
4 changed files with 20 additions and 1 deletions

View File

@ -96,7 +96,15 @@ Whether the number is [not a number](http://en.wikipedia.org/wiki/NaN). This is
### **log**
The natural logarithm of the number.
The natural logarithm of the number. Returns `nan` if the base is negative.
### **log2**
The binary (base-2) logarithm of the number. Returns `nan` if the base is negative.
### **exp**
The exponential `e` (Eulers number) raised to the number. This: `eⁿ`.
### **pow**(power)

View File

@ -652,6 +652,8 @@ DEF_NUM_FN(sin, sin)
DEF_NUM_FN(sqrt, sqrt)
DEF_NUM_FN(tan, tan)
DEF_NUM_FN(log, log)
DEF_NUM_FN(log2, log2)
DEF_NUM_FN(exp, exp)
DEF_PRIMITIVE(num_mod)
{
@ -1299,6 +1301,8 @@ void wrenInitializeCore(WrenVM* vm)
PRIMITIVE(vm->numClass, "sqrt", num_sqrt);
PRIMITIVE(vm->numClass, "tan", num_tan);
PRIMITIVE(vm->numClass, "log", num_log);
PRIMITIVE(vm->numClass, "log2", num_log2);
PRIMITIVE(vm->numClass, "exp", num_exp);
PRIMITIVE(vm->numClass, "%(_)", num_mod);
PRIMITIVE(vm->numClass, "~", num_bitwiseNot);
PRIMITIVE(vm->numClass, "..(_)", num_dotDot);

View File

@ -0,0 +1,3 @@
System.print(5.exp) // expect: 148.41315910258
System.print(10.exp) // expect: 22026.465794807
System.print((-1).exp) // expect: 0.36787944117144

View File

@ -0,0 +1,4 @@
System.print(1024.log2) // expect: 10
System.print(2048.log2) // expect: 11
System.print(100.log2) // expect: 6.6438561897747
System.print((-1).log2) // expect: nan