2015-07-14 11 views
6

Mentre guai con Swift, ho notato che nel caso di overflow interi a 64 bit, ottengo il seguente errore:integer overflow dà EXC_BAD_INSTRUCTION in Swift

file:///Users/user/Documents/playground/MyPlayground.playground/: error: Playground execution aborted: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).

func fibonacci(which: Int) -> (fibOf: Int, isEqualTo: Int) { 
    var i = 1, j = 1 

    for var k = 2; k < which; k += 1 { 
     let tmp = i + j // this line is highlighted when error occurs 
     j = i 
     i = tmp 
    } 

    return (which, i) 
} 

print (fibonacci(92)) 
print (fibonacci(93)) // this triggers an error 

La prima chiamata, cioè con 92 come argomento , funzionerà bene. Tuttavia, quando si fornisce il valore 93, viene visualizzato l'errore EXC_BAD_INSTRUCTION irrilevante. È un bug o cosa? Normalmente mi aspetterei che trabocchi.

+0

ho trovato questo googling "overflow integer Swift": https://developer.apple .com/library/ios/documentation/Swift/Concettuale/Swift_Programming_Language/AdvancedOperators.html # // apple_ref/doc/uid/TP40014097-CH27-ID37 –

risposta

9

È un comportamento previsto. Se si desidera eseguire un overflow, è necessario utilizzare overflow operators.

  • Inoltre Overflow (&+)
  • Overflow sottrazione (&-)
  • Overflow moltiplicazione (&*)
+2

Hmmm, vedo. Tuttavia, un messaggio di errore non intuitivo. Grazie – TGO