diff options
| -rw-r--r-- | builtins/nums.c | 8 | ||||
| -rw-r--r-- | builtins/nums.h | 2 | ||||
| -rw-r--r-- | environment.c | 2 | ||||
| -rw-r--r-- | test/nums.tm | 5 |
4 files changed, 17 insertions, 0 deletions
diff --git a/builtins/nums.c b/builtins/nums.c index 0ad2bdc2..286b8d1d 100644 --- a/builtins/nums.c +++ b/builtins/nums.c @@ -64,6 +64,10 @@ public double Num$random(void) { return drand48(); } +public double Num$mix(double amount, double x, double y) { + return (1.0-amount)*x + amount*y; +} + public double Num$from_text(CORD text, CORD *the_rest) { const char *str = CORD_to_const_char_star(text); char *end = NULL; @@ -142,6 +146,10 @@ public float Num32$random(void) { return (float)drand48(); } +public float Num32$mix(float amount, float x, float y) { + return (1.0-amount)*x + amount*y; +} + public float Num32$from_text(CORD text, CORD *the_rest) { const char *str = CORD_to_const_char_star(text); char *end = NULL; diff --git a/builtins/nums.h b/builtins/nums.h index 3b4386e0..ec1663a2 100644 --- a/builtins/nums.h +++ b/builtins/nums.h @@ -24,6 +24,7 @@ bool Num$finite(double n); bool Num$isnan(double n); double Num$nan(CORD tag); double Num$random(void); +double Num$mix(double amount, double x, double y); double Num$from_text(CORD text, CORD *the_rest); extern const TypeInfo $Num; @@ -38,6 +39,7 @@ bool Num32$isinf(float n); bool Num32$finite(float n); bool Num32$isnan(float n); float Num32$random(void); +float Num32$mix(float amount, float x, float y); float Num32$from_text(CORD text, CORD *the_rest); float Num32$nan(CORD tag); extern const TypeInfo $Num32; diff --git a/environment.c b/environment.c index ccf65e33..36a3b76e 100644 --- a/environment.c +++ b/environment.c @@ -114,6 +114,7 @@ env_t *new_compilation_unit(void) {"INF", "INFINITY", "Num"}, {"TAU", "(2.*M_PI)", "Num"}, {"random", "Num$random", "func()->Num"}, + {"mix", "Num$mix", "func(amount:Num, x:Num, y:Num)->Num"}, {"from_text", "Num$from_text", "func(text:Text, the_rest=!Text)->Num"}, {"abs", "fabs", "func(n:Num)->Num"}, F(acos), F(acosh), F(asin), F(asinh), F(atan), F(atanh), F(cbrt), F(ceil), F(cos), F(cosh), F(erf), F(erfc), @@ -141,6 +142,7 @@ env_t *new_compilation_unit(void) {"INF", "(Num32_t)(INFINITY)", "Num32"}, {"TAU", "(Num32_t)(2.f*M_PI)", "Num32"}, {"random", "Num32$random", "func()->Num32"}, + {"mix", "Num32$mix", "func(amount:Num32, x:Num32, y:Num32)->Num32"}, {"from_text", "Num32$from_text", "func(text:Text, the_rest=!Text)->Num32"}, {"abs", "fabsf", "func(n:Num32)->Num32"}, F(acos), F(acosh), F(asin), F(asinh), F(atan), F(atanh), F(cbrt), F(ceil), F(cos), F(cosh), F(erf), F(erfc), diff --git a/test/nums.tm b/test/nums.tm index 766cfb48..aee7c688 100644 --- a/test/nums.tm +++ b/test/nums.tm @@ -48,3 +48,8 @@ func main() >> Num32.sqrt(16f32) = 4_f32 + + >> 0.25:mix(10, 20) + = 12.5 + >> 2.0:mix(10, 20) + = 30 |
