2011-04-15 19 views
5

C'den farklı olarak, Java, x/y ve negatif işlenenler için bile iyi tanımlanmış x%y sonucudur. Şaşırtıcı bir şekilde, yuvarlama ile sıfıra doğru değil, yuvarlayarak (yani negatif sonsuza doğru) tanımlanır. Bu tanımın herhangi bir avantajı var mı?Niçin integer div ve mod sıfıra doğru yuvarlanır?

Çoğu durumda sadece umrumda değil, bazen bunun etrafında çalışmak zorundaydım, örneğin modulo array.length'u kullanarak bir dizin hesaplarken.

Bu hiç bir rant değil, bu tanım için kullanışlar varsa gerçekten ilgileniyorum.

+0

o donanım işler böyle yürüyor. küçük bir şey, size dizi.length bir güç tutmak için deneyin ve 2 kullanın ve kullanın (dizi.length-1) – bestsss

cevap

6

Sıfıra doğru yuvarlarsanız, bölüm rutinini uygulamak daha kolaydır. Çoğunlukla, bir negatif içeren bir bölünme işareti işaretlidir ve daha sonra bölüşüm pozitif bir eşdeğer üzerinde gerçekleştirilir ve daha sonra cevap tekrar geri çevrilir. Yani etki doğal olarak sıfıra doğru yuvarlak olacak.

+0

Bu doğru, ancak, böyle bir tanım hataların ortak bir kaynağıdır ve aksi takdirde yapmak o pahalı olmaz. Hala bu (garip ama standart) tanımdan herhangi bir avantajı olan var mı? – maaartinus

+1

@maaartinus: Akla gelen ilk şey, sıfıra doğru yuvarlamanın, tarafsız bir kuantizasyon hatası vermesidir (veri, + ve -ve arasında eşit olarak dağıldığı varsayıldığında), oysa doğruya doğru eksi sonsuzluk, bir önyargı ile sonuçlanır. . –

1

İşte ancak biraz Kullanışlı bir örnek verilmiştir: (. ROWS_PER_PAGE > 1 varsayarak maxPage = 0rows.length = 0 için özel bir durum gerek yok,)

maxPage = (rows.length - 1)/ROWS_PER_PAGE