Skip to content

Commit bf51d25

Browse files
marke000claude
andcommitted
Fix long overflow in round' function
Cast to double before multiplying by -1 or sgn to prevent overflow when Math/round returns values near Long/MIN_VALUE. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 92bf59b commit bf51d25

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

src/provisdom/math/core.clj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,13 +1237,13 @@
12371237
number
12381238
(let [number (double number)
12391239
number (case round-type
1240-
:down (* -1 (Math/round (- number)))
1240+
:down (long (* -1.0 (Math/round (- number))))
12411241

12421242
:away-from-zero
1243-
(* (sgn number) (Math/round ^double (abs number)))
1243+
(long (* (double (sgn number)) (Math/round ^double (abs number))))
12441244

12451245
:toward-zero
1246-
(* -1 (sgn number) (Math/round ^double (- (abs number))))
1246+
(long (* -1.0 (double (sgn number)) (Math/round ^double (- (abs number)))))
12471247

12481248
:toward-even
12491249
(long (Math/rint number))

0 commit comments

Comments
 (0)