summaryrefslogtreecommitdiffstats
path: root/lib/gcd.c
diff options
context:
space:
mode:
authorEthan Werner <mail@ethanwerner.com>2026-08-09 15:02:21 +0400
committerEthan Werner <mail@ethanwerner.com>2026-08-09 15:02:21 +0400
commit3d92926a902017e7cf1f5738e99ff62da596ce12 (patch)
tree2b55422c26a48759d56fa91f06df24449e9dfa88 /lib/gcd.c
parent07e18043145f3d91c8ea7ec3ad41b3c905585277 (diff)
refactormain
Diffstat (limited to 'lib/gcd.c')
-rw-r--r--lib/gcd.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/lib/gcd.c b/lib/gcd.c
index 44068cf..8ca3861 100644
--- a/lib/gcd.c
+++ b/lib/gcd.c
@@ -31,18 +31,25 @@ int ts_gcd(
{
TS_PROLOGUE( ts_gcd_p );
(void)c;
- for( uint_t i = 0; i < n; ++i )
- {
- long a = (long)fabs(x[0][i]);
- long b = (long)fabs(x[1][i]);
- while( b )
- {
- long t = b;
- b = a % b;
- a = t;
- }
- y[0][i] = (fp_t)a;
- }
+ for( uint_t i = 0; i < n; ++i )
+ {
+ fp_t ax = fabs(x[0][i]);
+ fp_t bx = fabs(x[1][i]);
+ if (ax > 9223372036854775807.0 || bx > 9223372036854775807.0)
+ {
+ y[0][i] = 0;
+ continue;
+ }
+ long a = (long)ax;
+ long b = (long)bx;
+ while( b )
+ {
+ long t = b;
+ b = a % b;
+ a = t;
+ }
+ y[0][i] = (fp_t)fabs((fp_t)a);
+ }
return 0;
}