aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/environment.c2
-rw-r--r--src/stdlib/nums.c8
-rw-r--r--src/stdlib/nums.h2
3 files changed, 12 insertions, 0 deletions
diff --git a/src/environment.c b/src/environment.c
index 85677524..94461305 100644
--- a/src/environment.c
+++ b/src/environment.c
@@ -223,6 +223,7 @@ env_t *global_env(void)
{"clamped", "Num$clamped", "func(x,low,high:Num -> Num)"},
{"format", "Num$format", "func(n:Num, precision=16 -> Text)"},
{"scientific", "Num$scientific", "func(n:Num,precision=0 -> Text)"},
+ {"percent", "Num$percent", "func(n:Num,precision=0 -> Text)"},
{"isinf", "Num$isinf", "func(n:Num -> Bool)"},
{"isfinite", "Num$isfinite", "func(n:Num -> Bool)"},
{"modulo", "Num$mod", "func(x,y:Num -> Num)"},
@@ -254,6 +255,7 @@ env_t *global_env(void)
{"clamped", "Num32$clamped", "func(x,low,high:Num32 -> Num32)"},
{"format", "Num32$format", "func(n:Num32, precision=8 -> Text)"},
{"scientific", "Num32$scientific", "func(n:Num32, precision=0 -> Text)"},
+ {"percent", "Num32$percent", "func(n:Num32,precision=0 -> Text)"},
{"isinf", "Num32$isinf", "func(n:Num32 -> Bool)"},
{"isfinite", "Num32$isfinite", "func(n:Num32 -> Bool)"},
C(2_SQRTPI), C(E), C(PI_2), C(2_PI), C(1_PI), C(LN10), C(LN2), C(LOG2E),
diff --git a/src/stdlib/nums.c b/src/stdlib/nums.c
index 98f7b509..93e2b21b 100644
--- a/src/stdlib/nums.c
+++ b/src/stdlib/nums.c
@@ -57,6 +57,10 @@ public Text_t Num$scientific(double f, Int_t precision) {
return Text$format("%.*e", (int)Int64$from_int(precision, false), f);
}
+public Text_t Num$percent(double f, Int_t precision) {
+ return Text$format("%.*f%%", (int)Int64$from_int(precision, false), 100.*f);
+}
+
public CONSTFUNC double Num$mod(double num, double modulus) {
// Euclidean division, see: https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
double r = remainder(num, modulus);
@@ -138,6 +142,10 @@ public Text_t Num32$scientific(float f, Int_t precision) {
return Text$format("%.*e", (int)Int64$from_int(precision, false), (double)f);
}
+public Text_t Num32$percent(float f, Int_t precision) {
+ return Text$format("%.*f%%", (int)Int64$from_int(precision, false), 100.*(double)f);
+}
+
public CONSTFUNC float Num32$mod(float num, float modulus) {
// Euclidean division, see: https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
float r = remainderf(num, modulus);
diff --git a/src/stdlib/nums.h b/src/stdlib/nums.h
index af0e895b..be270f51 100644
--- a/src/stdlib/nums.h
+++ b/src/stdlib/nums.h
@@ -23,6 +23,7 @@ PUREFUNC bool Num$equal(const void *x, const void *y, const TypeInfo_t *type);
CONSTFUNC bool Num$near(double a, double b, double ratio, double absolute);
Text_t Num$format(double f, Int_t precision);
Text_t Num$scientific(double f, Int_t precision);
+Text_t Num$percent(double f, Int_t precision);
double Num$mod(double num, double modulus);
double Num$mod1(double num, double modulus);
CONSTFUNC bool Num$isinf(double n);
@@ -74,6 +75,7 @@ PUREFUNC bool Num32$equal(const void *x, const void *y, const TypeInfo_t *type);
CONSTFUNC bool Num32$near(float a, float b, float ratio, float absolute);
Text_t Num32$format(float f, Int_t precision);
Text_t Num32$scientific(float f, Int_t precision);
+Text_t Num32$percent(float f, Int_t precision);
float Num32$mod(float num, float modulus);
float Num32$mod1(float num, float modulus);
CONSTFUNC bool Num32$isinf(float n);