2013-05-13 13 views
5

Provare a eseguire una divisione del valore negativo in Ruby, ad es. -123/10, perché restituisce -13 anziché -12?divisione intera in Ruby con valore negativo

ruby -v 
ruby 1.9.3p375 (2013-01-18) [x86_64-darwin12.2.1] 

irb(main):001:0> -123/10 
=> -13 
irb(main):002:0> -123%10 
=> 7 

-123/10 restituisce -12 e -123% 10 restituisce -3 in C/C++ come previsto.

+1

Il risultato di '-123% 10' in C e C++ è, per quanto ne so, dipendente dalla piattaforma quindi state attenti su come utilizzare il comportamento C come standard. –

risposta

7

Ecco come è progettato. Ruby arrotonda i numeri verso l'infinito negativo in caso di divisione negativa e operazione modulo. Questo non è univoco per Ruby, Python e Perl si comportano anche in questo modo.

Tuttavia, questo approccio fornisce una buona ragione matematica.

a/b = q con resto r

tale che

b * q + r = a and 0 <= r < b 

Da quello che ho letto, questo è il modo in aritmetica è insegnato in Giappone.

Edit:

sawa ha sottolineato che questo è il modo positivo aritmetica viene insegnato in Giappone, non i numeri negativi. Tuttavia, come ha detto, questo può essere esteso anche ai numeri negativi.

Fonti:

Ruby Forums

+0

La tua citazione (così come l'originale) è fuorviante. 1. Questa formula è in effetti come viene insegnata nelle scuole elementari in Giappone, ma non è solo in Giappone. 2. Le scuole elementari giapponesi non insegnano numeri negativi. Ottieni questo comportamento estendendo la formula ai numeri negativi. Non perché è stato insegnato così. – sawa

+1

@sawa Aggiornato la mia risposta prendendo in considerazione il tuo commento. –

+0

Link Ruby Forum è morto :( –

Problemi correlati