Skip to content

Commit 0cb4588

Browse files
committed
Implement math.copysign
1 parent a351bd5 commit 0cb4588

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

integration_tests/test_math.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from math import (factorial, isqrt, perm, comb, degrees, radians, exp, pow,
2-
ldexp, fabs, gcd, lcm)
2+
ldexp, fabs, gcd, lcm, copysign)
33
from ltypes import i32, f64
44

55

@@ -86,13 +86,9 @@ def test_lcm():
8686

8787
def test_copysign():
8888
f: f64
89-
f = copysign(4, -1)
90-
assert f == -4.0
91-
f = copysign(-8, 97.21)
92-
assert f == 8.0
93-
f = copysign(0, -1)
94-
assert f == -0.0
95-
f = copysign(-43, -76)
89+
f = copysign(-8.56, 97.21)
90+
assert f == 8.56
91+
f = copysign(-43.0, -76.67)
9692
assert f == -43.0
9793

9894

src/runtime/math.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,17 @@ def lcm(a: i32, b: i32) -> i32:
140140
return 0
141141
return (a*b)//gcd(a, b)
142142

143+
144+
def copysign(x: f64, y: f64) -> f64:
145+
"""
146+
Return `x` with the sign of `y`.
147+
"""
148+
if y > 0.0 or (y == 0.0 and atan2(y, -1.0) > 0.0):
149+
return fabs(x)
150+
else:
151+
return -fabs(x)
152+
153+
143154
def sqrt(x: f64) -> f64:
144155
return x**(1/2)
145156

0 commit comments

Comments
 (0)