Skip to content

Commit bc357fb

Browse files
committed
Fix Xcode 26.4 compiler issue
1 parent d09d98b commit bc357fb

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

Sources/BigNumber/Swift-Big-Number-Core.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2999,7 +2999,7 @@ public struct BDouble:
29992999
return true;
30003000
} else if diff <= epsilon {
30013001
return true // shortcut
3002-
} else if (lhs == 0 || rhs == 0 || diff < Double.leastNormalMagnitude) {
3002+
} else if (lhs.isZero() || rhs.isZero() || diff < Double.leastNormalMagnitude) {
30033003
// lhs or rhs is zero or both are extremely close to it
30043004
// relative error is less meaningful here
30053005
return diff < (epsilon * Double.leastNormalMagnitude);

Tests/BigNumberTests/BDoubleTests.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,20 @@ class BDoubleTests : XCTestCase {
493493
XCTAssert(BDouble.nearlyEqual(BDouble(0.000000001), BDMin));
494494
XCTAssert(BDouble.nearlyEqual(BDMin, BDouble(0.000000001)));
495495
XCTAssert(BDouble.nearlyEqual(-BDMin, BDouble(0.000000001)));
496+
497+
// Non-canonical zero (negative sign with zero numerator via raw initializer)
498+
let rawNegZero = BDouble(sign: true, numerator: [0], denominator: [2])
499+
XCTAssert(rawNegZero.isZero())
500+
XCTAssert(BDouble.nearlyEqual(rawNegZero, BDouble(0.0)))
501+
XCTAssert(BDouble.nearlyEqual(BDouble(0.0), rawNegZero))
502+
XCTAssert(BDouble.nearlyEqual(rawNegZero, rawNegZero))
503+
XCTAssert(BDouble.nearlyEqual(rawNegZero, BDouble(0.00000001)))
504+
505+
// Integer-literal zero (the pattern that triggered the Xcode 26.4 ambiguity)
506+
let intZero: BDouble = 0
507+
XCTAssert(intZero.isZero())
508+
XCTAssert(BDouble.nearlyEqual(intZero, BDouble(0.0)))
509+
XCTAssert(BDouble.nearlyEqual(intZero, rawNegZero))
496510
}
497511

498512
func testRadix() {

0 commit comments

Comments
 (0)