From e56fd1aa94db77c6210c649c9cf8163678326355 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 13 Aug 2024 16:36:41 -0400 Subject: Add Int:sqrt() --- builtins/integers.c | 8 ++++++++ builtins/integers.h | 1 + environment.c | 1 + 3 files changed, 10 insertions(+) diff --git a/builtins/integers.c b/builtins/integers.c index e55d2ab0..b7d96a90 100644 --- a/builtins/integers.c +++ b/builtins/integers.c @@ -302,6 +302,14 @@ public Int_t Int$power(Int_t base, Int_t exponent) return Int$from_mpz(result); } +public Int_t Int$sqrt(Int_t i) +{ + mpz_t result; + mpz_init_set_int(result, i); + mpz_sqrt(result, result); + return Int$from_mpz(result); +} + public Int_t Int$random(Int_t min, Int_t max) { int32_t cmp = Int$compare(&min, &max, &$Int); if (cmp > 0) diff --git a/builtins/integers.h b/builtins/integers.h index 8250e0dc..98b58b0f 100644 --- a/builtins/integers.h +++ b/builtins/integers.h @@ -60,6 +60,7 @@ Range_t Int$to(Int_t from, Int_t to); Int_t Int$from_text(CORD text); Int_t Int$abs(Int_t x); Int_t Int$power(Int_t base, Int_t exponent); +Int_t Int$sqrt(Int_t i); #define BIGGEST_SMALL_INT ((1<<29)-1) diff --git a/environment.c b/environment.c index c8056cc5..95cd4673 100644 --- a/environment.c +++ b/environment.c @@ -107,6 +107,7 @@ env_t *new_compilation_unit(CORD *libname) {"negative", "Int$negative", "func(x:Int)->Int"}, {"negated", "Int$negated", "func(x:Int)->Int"}, {"abs", "Int$abs", "func(x:Int)->Int"}, + {"sqrt", "Int$sqrt", "func(x:Int)->Int"}, {"power", "Int$power", "func(base:Int,exponent:Int)->Int"}, )}, {"Int64", Type(IntType, .bits=64), "Int64_t", "$Int64", TypedArray(ns_entry_t, -- cgit v1.2.3