Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Ξεκίνησα java, Δεν μπορώ να καταλάβω το module (Έτσι το λένε απο οτι εχω καταλάβει εννοώ το % ) γράφει 

 

  1. The modulo operator - represented in Java by the % symbol - returns the remainder of dividing two numbers.

For example, 15 % 6 will return the value of 3, because that is the remainder left over after dividing 15 by 6.

 

Το ερώτημα μου είναι ότι αν κάνω 15/6 θα βγει 2,5 και όχι 3.Μπορεί κάποιος να μου το εξηγήσει.???

 

Δημοσ.

Είναι το υπόλοιπο της διαίρεσης, όχι το αποτέλεσμα της.

Δηλαδή, 13 διά 7 μας κάνει 1 με υπόλοιπο 6. Το 13%7 θα σου δώσει 6. 

Κατανοητό;

  • Like 1
Δημοσ.

Ξεκίνησα java, Δεν μπορώ να καταλάβω το module (Έτσι το λένε απο οτι εχω καταλάβει εννοώ το % ) γράφει 

 

  1. The modulo operator - represented in Java by the % symbol - returns the remainder of dividing two numbers.

For example, 15 % 6 will return the value of 3, because that is the remainder left over after dividing 15 by 6.

 

Το ερώτημα μου είναι ότι αν κάνω 15/6 θα βγει 2,5 και όχι 3.Μπορεί κάποιος να μου το εξηγήσει.???

επιστρεφει το υπολοιπο της διαιρεσης

  • Like 1
Δημοσ.

Ξεκίνησα java, Δεν μπορώ να καταλάβω το module (Έτσι το λένε απο οτι εχω καταλάβει εννοώ το % ) γράφει 

 

  1. The modulo operator - represented in Java by the % symbol - returns the remainder of dividing two numbers.

For example, 15 % 6 will return the value of 3, because that is the remainder left over after dividing 15 by 6.

 

Το ερώτημα μου είναι ότι αν κάνω 15/6 θα βγει 2,5 και όχι 3.Μπορεί κάποιος να μου το εξηγήσει.???

 

https://www.google.de/search?q=translate+remainder+to+greek

  • Like 1
Δημοσ.

Το θέμα του modulo (mod ή %) δεν είναι τόσο αθώο όσο φαίνεται αρχικά.
Modulo ΔΕΝ είναι το υπόλοιπο της διαίρεσης όπως αφελώς νομίζει ο πολύς κόσμος.

Έστω DIV η ακέραια διαίρεση και Α,Β δυο αριθμοί, τότε

A = ( A DIV B ) * B  +  A mod B

 

Έστω A = -340, B = 60
A = ( -340 DIV 60 ) * 60 + ( -340 mod 60 ) =  ( -5 ) * 60 + ( -40 )

δηλ. -340 % 60 = -40
 
Ωστόσο, κάποιες εφαρμογές (π.χ. το Excel) ή γλώσσες προγραμματισμού, δίνουν
 A = ( -340 DIV 60 ) * 60 + ( -340 mod 60 ) =  -6 * 60 +  20

δηλ. -340 % 60 = 20

 

Οι γλώσσες προγραμματισμού και οι βιβλιοθήκες είναι αξιοσημείωτα ασυνεπείς στην εφαρμογή του mod

για αρνητικούς αριθμούς.
Υπάρχουν διάφοροι τρόποι να ερμηνευτεί και δυστυχώς η επιλογή γενικά δεν είναι η μαθηματικά σωστή.

Μαθηματικά, το modulo δεν ορίζεται ως συνάρτηση αλλά ως μια σχέση :
δυο αριθμοί a,b είναι "συναφείς" (congruent) με modulo m αν το (a - b ) είναι πολλαπλάσιο του m.
Για να φτιαχτεί μια συνάρτηση από αυτή τη σχέση, πρέπει να οριστεί σαφώς ποιός αριθμός b από όλους

όσους είναι "congruent" με το a, πρέπει να επιστρέφεται.

Ένας τυπικός ορισμός λέει ότι όταν a=b (mod m), το b πρέπει να είναι μη αρνητικό και μικρότερο από το m.
 

Το πρόβλημα οφείλεται στο ότι οι αδαείς συγχέουν το modulo με το υπόλοιπο της διαίρεσης, κάτι που ΔΕΝ ισχύει !!!
Π.χ. το υπόλοιπο του 12 με το 5 είναι 2, ίσο με το modulo του 12 με το 5.

Ωστόσο, ενώ το υπόλοιπο του -12 με το 5 είναι -2, το modulo του -12 με το 5 είναι 3.
Το ακέραιο μέρος στους αρνητικούς ορίζεται μαθηματικά με στρογγύλευση προς τα κάτω κι όχι προς το μηδέν.
Κάποιες γλώσσες έχουν μεριμνήσει και παρέχουν ξεχωριστες συναρτήσεις ώστε το αποτέλεσμα να είναι πάντα το σωστό και να μην μπερδεύεται ο χρήστης.
Π.χ. στη Fortran υπάρχει οι Mod(a , b ) και Modulo( a , b ). H μια δίνει όντως το υπόλοιπο της διαίρεσης κι άλλη το modulo όπως είναι το σωστό μαθηματικά. Το ίδιο και στην Ada.
Οι C, C++ και Java ΔΕΝ τηρούν τον παραπάνω κανόνα για αρνητικούς αριθμούς και συνεπώς κακώς το % ονομάζεται modulo - είναι μόνον το υπόλοιπο της διαίρεσης.

 

-

  • Like 1
Δημοσ.

Οι C, C++ και Java ΔΕΝ τηρούν τον παραπάνω κανόνα για αρνητικούς αριθμούς και συνεπώς κακώς το % ονομάζεται modulo - είναι μόνον το υπόλοιπο της διαίρεσης.

 

Μόνο που και στις 3 γλώσσες που αναφέρεις ο τελεστής ονομάζεται "remainder operator" και όχι modulo. Οπότε το πρόβλημα δεν είναι η ελλιπής γνώση μαθηματικών από τους θέτοντες το πρότυπο αλλά η ελλιπής γνώση προτύπου από αυτούς που το χρησιμοποιούν.

  • Like 1
Δημοσ.

Τo πρότυπο της C, τουλάχιστον τότε που είχα ψάξει, δεν καθορίζει σαφώς πώς ένας επεξεργαστής

χειρίζεται την διαίρεση ακεραίων.

Όπως πολλά στραβά πράγματα στη C, το % είναι (ή τουλάχιστον ήταν) "processor-dependent".

Oι compilers της C/C++ συνήθως στρογγυλεύουν κατά το 0 αλλά αυτό δεν είναι επίσημος κανονας,

πράγμα που δυσκολεύει την φορητότητα του κώδικα.

Αυτές οι ασάφειες δεν υπάρχουν σε άλλες γλώσσες. Στην Java δεν ξέρω τι γίνεται.

 

Όπως επισημαίνεται στο "C: A Reference Manual", Harbison & Steele, 

"For maximum portability, programs should therefore avoid depending on the behavior of the

remainder operator when applied to negative integral operands."

-

  • Like 1
Δημοσ.

Τo πρότυπο της C, τουλάχιστον τότε που είχα ψάξει, δεν καθορίζει σαφώς πώς ένας επεξεργαστής

χειρίζεται την διαίρεση ακεραίων.

Όπως πολλά στραβά πράγματα στη C, το % είναι (ή τουλάχιστον ήταν) "processor-dependent".

Oι compilers της C/C++ συνήθως στρογγυλεύουν κατά το 0 αλλά αυτό δεν είναι επίσημος κανονας,

πράγμα που δυσκολεύει την φορητότητα του κώδικα.

 

Η μόνη γλώσσα που το αφήνει φλου είναι η ANSI C, aka C89. Όλα τα επόμενα πρότυπα, συμπεριλαμβανομένων C++ και Java, δηλώνουν ρητά ότι η διαίρεση γίνεται προς το μηδέν και άρα εγγυημένα μιλάμε για υπόλοιπο.

 

Το βιβλίο στο οποίο αναφέρεσαι (μάλλον, η συγκεκριμένη έκδοσή του) είναι προφανώς παρωχημένο.

 

ΥΓ προφανώς ακόμα κι αν δεν ξέρεις τι σου ξημερώνει με τον τελεστή, μπορείς αντί για X % Y να γράψεις (X % Y + Y) % Y και να είσαι καλυμμένος σε όλες τις περιπτώσεις. Αν θες υπόλοιπο αντί για modulo κοιτάς και το πρόσημο του X.

  • Like 2
Δημοσ.

Ξεκίνησα java, Δεν μπορώ να καταλάβω το module (Έτσι το λένε απο οτι εχω καταλάβει εννοώ το % ) γράφει 

 

  1. The modulo operator - represented in Java by the % symbol - returns the remainder of dividing two numbers.

For example, 15 % 6 will return the value of 3, because that is the remainder left over after dividing 15 by 6.

 

Το ερώτημα μου είναι ότι αν κάνω 15/6 θα βγει 2,5 και όχι 3.Μπορεί κάποιος να μου το εξηγήσει.???

 

Επίσης αν κάνεις 15/6 θα σου βγάλει 2, όχι 2,5. Γιατί;

(εννοείται ότι η ερώτηση απευθύνεται προς τον takiskan, για να το ψάξει (και αυτό) λίγο)

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...