File tree Expand file tree Collapse file tree 2 files changed +15
-1
lines changed
Expand file tree Collapse file tree 2 files changed +15
-1
lines changed Original file line number Diff line number Diff 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) ;
Original file line number Diff line number Diff 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( ) {
You can’t perform that action at this time.
0 commit comments