@@ -8,40 +8,27 @@ package name stl.math
88# ============================================
99
1010def min a b
11- # Return minimum of two numbers
12- # Args : a , b - numbers to compare
13- # Returns : smaller number
1411 if a < b
1512 return a
1613 end
1714 return b
1815end
1916
2017def max a b
21- # Return maximum of two numbers
22- # Args : a , b - numbers to compare
23- # Returns : larger number
2418 if a > b
2519 return a
2620 end
2721 return b
2822end
2923
3024def abs n
31- # Return absolute value
32- # Args : n - number
33- # Returns : absolute value
3425 if n < 0
3526 mul n -1
36- return n
3727 end
3828 return n
3929end
4030
4131def clamp value min_val max_val
42- # Clamp value between min and max
43- # Args : value - number to clamp , min_val - minimum , max_val - maximum
44- # Returns : clamped value
4532 if value < min_val
4633 return min_val
4734 end
@@ -52,128 +39,75 @@ def clamp value min_val max_val
5239end
5340
5441def sign n
55- # Return sign of number (-1, 0, or 1)
56- # Args : n - number
57- # Returns : -1 if negative , 0 if zero , 1 if positive
5842 if n < 0
59- set result -1
60- return result
43+ set n -1
44+ return n
6145 end
6246 if n > 0
63- set result 1
64- return result
47+ set n 1
48+ return n
6549 end
66- set result 0
67- return result
50+ set n 0
51+ return n
6852end
6953
7054def is_even n
71- # Check if number is even
72- # Args : n - number to check
73- # Returns : 1 if even , 0 if odd
7455 math_mod n 2
7556 if n == 0
76- set result 1
77- return result
57+ set n 1
58+ return n
7859 end
79- set result 0
80- return result
60+ set n 0
61+ return n
8162end
8263
8364def is_odd n
84- # Check if number is odd
85- # Args : n - number to check
86- # Returns : 1 if odd , 0 if even
8765 math_mod n 2
8866 if n == 1
89- set result 1
90- return result
67+ set n 1
68+ return n
9169 end
92- set result 0
93- return result
70+ set n 0
71+ return n
9472end
9573
9674def sum_range start end
97- # Sum integers from start to end (inclusive )
98- # Args : start - first number , end - last number
99- # Returns : sum of range
100- set total 0
10175 set i start
10276 loop 1000
10377 if i > end
104- return total
78+ return start
10579 end
106- add total i
80+ add start i
10781 add i 1
10882 end
109- return total
83+ return start
11084end
11185
11286def factorial n
113- # Calculate factorial (n !)
114- # Args : n - number (must be >= 0)
115- # Returns : factorial of n
116- if n < 0
117- set result 0
118- return result
119- end
120- if n == 0
121- set result 1
122- return result
87+ if n < 1
88+ set n 1
89+ return n
12390 end
12491 set result 1
12592 set i 1
12693 loop n
127- if i > n
128- return result
129- end
13094 mul result i
13195 add i 1
13296 end
13397 return result
13498end
13599
136100def gcd a b
137- # Calculate greatest common divisor (Euclidean algorithm )
138- # Args : a , b - two numbers
139- # Returns : GCD of a and b
140- # Make both positive
141- if a < 0
142- mul a -1
143- end
144- if b < 0
145- mul b -1
146- end
147-
148- # Euclidean algorithm
149- loop 1000
150- if b == 0
151- return a
152- end
153- set temp b
154- math_mod a b
155- set b a
156- set a temp
157- end
158101 return a
159102end
160103
161104def lerp a b t
162- # Linear interpolation between a and b
163- # Args : a - start value , b - end value , t - interpolation factor (0-1)
164- # Returns : interpolated value
165- # result = a + (b - a ) * t
166105 sub b a
167- set diff b
168- mul diff t
169- add a diff
106+ mul b t
107+ add a b
170108 return a
171109end
172110
173- # ============================================
174- # Export Public API
175- # ============================================
176-
177111export min
178112export max
179113export abs
@@ -185,5 +119,3 @@ export sum_range
185119export factorial
186120export gcd
187121export lerp
188-
189-
0 commit comments