Added a lot of stdlib's to lib/ and many small fixes. (0.16.4)
This commit is contained in:
parent
17241b2401
commit
2b82a01fb5
9 changed files with 674 additions and 60 deletions
90
lib/math.fun
Normal file
90
lib/math.fun
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* This file is part of the Fun programming language.
|
||||
* https://hanez.org/project/fun/
|
||||
*
|
||||
* Copyright 2025 Johannes Findeisen
|
||||
* Licensed under the terms of the Apache-2.0 license.
|
||||
* https://opensource.org/license/apache-2-0
|
||||
*
|
||||
* Added: 2025-10-01
|
||||
*/
|
||||
|
||||
// Math helpers
|
||||
|
||||
fun abs(x)
|
||||
if (x < 0)
|
||||
return -x
|
||||
return x
|
||||
|
||||
fun clamp(x, lo, hi)
|
||||
v = x
|
||||
if (v < lo) v = lo
|
||||
if (v > hi) v = hi
|
||||
return v
|
||||
|
||||
fun gcd(a, b)
|
||||
number x = abs(a)
|
||||
number y = abs(b)
|
||||
while y != 0
|
||||
t = x % y
|
||||
x = y
|
||||
y = t
|
||||
return x
|
||||
|
||||
fun lcm(a, b)
|
||||
if (a == 0) || (b == 0)
|
||||
return 0
|
||||
return abs(a * b) / gcd(a, b)
|
||||
|
||||
// integer exponent (exp >= 0)
|
||||
fun powi(base, exp)
|
||||
number e = exp
|
||||
if (e < 0)
|
||||
// simple fallback for negative: 0 for now (no floats)
|
||||
return 0
|
||||
number result = 1
|
||||
number b = base
|
||||
while e > 0
|
||||
if (e % 2 == 1)
|
||||
result = result * b
|
||||
b = b * b
|
||||
e = e / 2
|
||||
return result
|
||||
|
||||
// Min/Max over three numbers
|
||||
fun min3(a, b, c)
|
||||
m = a
|
||||
if (b < m) m = b
|
||||
if (c < m) m = c
|
||||
return m
|
||||
|
||||
fun max3(a, b, c)
|
||||
m = a
|
||||
if (b > m) m = b
|
||||
if (c > m) m = c
|
||||
return m
|
||||
|
||||
// Array min/max (for non-empty arrays)
|
||||
fun array_min(arr)
|
||||
number n = len(arr)
|
||||
if (n == 0)
|
||||
return 0
|
||||
m = arr[0]
|
||||
number i = 1
|
||||
while i < n
|
||||
if (arr[i] < m)
|
||||
m = arr[i]
|
||||
i = i + 1
|
||||
return m
|
||||
|
||||
fun array_max(arr)
|
||||
number n = len(arr)
|
||||
if (n == 0)
|
||||
return 0
|
||||
m = arr[0]
|
||||
number i = 1
|
||||
while i < n
|
||||
if (arr[i] > m)
|
||||
m = arr[i]
|
||||
i = i + 1
|
||||
return m
|
||||
Loading…
Add table
Add a link
Reference in a new issue