takiskan Δημοσ. 31 Οκτωβρίου 2015 Δημοσ. 31 Οκτωβρίου 2015 Ξεκίνησα java, Δεν μπορώ να καταλάβω το module (Έτσι το λένε απο οτι εχω καταλάβει εννοώ το % ) γράφει 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.Μπορεί κάποιος να μου το εξηγήσει.???
ktiniatros Δημοσ. 31 Οκτωβρίου 2015 Δημοσ. 31 Οκτωβρίου 2015 Είναι το υπόλοιπο της διαίρεσης, όχι το αποτέλεσμα της.Δηλαδή, 13 διά 7 μας κάνει 1 με υπόλοιπο 6. Το 13%7 θα σου δώσει 6. Κατανοητό; 1
orestis1996 Δημοσ. 31 Οκτωβρίου 2015 Δημοσ. 31 Οκτωβρίου 2015 Ξεκίνησα java, Δεν μπορώ να καταλάβω το module (Έτσι το λένε απο οτι εχω καταλάβει εννοώ το % ) γράφει 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.Μπορεί κάποιος να μου το εξηγήσει.??? επιστρεφει το υπολοιπο της διαιρεσης 1
defacer Δημοσ. 31 Οκτωβρίου 2015 Δημοσ. 31 Οκτωβρίου 2015 Ξεκίνησα java, Δεν μπορώ να καταλάβω το module (Έτσι το λένε απο οτι εχω καταλάβει εννοώ το % ) γράφει 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 1
V.I.Smirnov Δημοσ. 31 Οκτωβρίου 2015 Δημοσ. 31 Οκτωβρίου 2015 Το θέμα του modulo (mod ή %) δεν είναι τόσο αθώο όσο φαίνεται αρχικά.Modulo ΔΕΝ είναι το υπόλοιπο της διαίρεσης όπως αφελώς νομίζει ο πολύς κόσμος. Έστω DIV η ακέραια διαίρεση και Α,Β δυο αριθμοί, τότε A = ( A DIV B ) * B + A mod B Έστω A = -340, B = 60A = ( -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 - είναι μόνον το υπόλοιπο της διαίρεσης. - 1
defacer Δημοσ. 31 Οκτωβρίου 2015 Δημοσ. 31 Οκτωβρίου 2015 Οι C, C++ και Java ΔΕΝ τηρούν τον παραπάνω κανόνα για αρνητικούς αριθμούς και συνεπώς κακώς το % ονομάζεται modulo - είναι μόνον το υπόλοιπο της διαίρεσης. Μόνο που και στις 3 γλώσσες που αναφέρεις ο τελεστής ονομάζεται "remainder operator" και όχι modulo. Οπότε το πρόβλημα δεν είναι η ελλιπής γνώση μαθηματικών από τους θέτοντες το πρότυπο αλλά η ελλιπής γνώση προτύπου από αυτούς που το χρησιμοποιούν. 1
V.I.Smirnov Δημοσ. 31 Οκτωβρίου 2015 Δημοσ. 31 Οκτωβρίου 2015 Τ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."- 1
defacer Δημοσ. 31 Οκτωβρίου 2015 Δημοσ. 31 Οκτωβρίου 2015 Τo πρότυπο της C, τουλάχιστον τότε που είχα ψάξει, δεν καθορίζει σαφώς πώς ένας επεξεργαστής χειρίζεται την διαίρεση ακεραίων. Όπως πολλά στραβά πράγματα στη C, το % είναι (ή τουλάχιστον ήταν) "processor-dependent". Oι compilers της C/C++ συνήθως στρογγυλεύουν κατά το 0 αλλά αυτό δεν είναι επίσημος κανονας, πράγμα που δυσκολεύει την φορητότητα του κώδικα. Η μόνη γλώσσα που το αφήνει φλου είναι η ANSI C, aka C89. Όλα τα επόμενα πρότυπα, συμπεριλαμβανομένων C++ και Java, δηλώνουν ρητά ότι η διαίρεση γίνεται προς το μηδέν και άρα εγγυημένα μιλάμε για υπόλοιπο. Το βιβλίο στο οποίο αναφέρεσαι (μάλλον, η συγκεκριμένη έκδοσή του) είναι προφανώς παρωχημένο. ΥΓ προφανώς ακόμα κι αν δεν ξέρεις τι σου ξημερώνει με τον τελεστή, μπορείς αντί για X % Y να γράψεις (X % Y + Y) % Y και να είσαι καλυμμένος σε όλες τις περιπτώσεις. Αν θες υπόλοιπο αντί για modulo κοιτάς και το πρόσημο του X. 2
nplatis Δημοσ. 6 Νοεμβρίου 2015 Δημοσ. 6 Νοεμβρίου 2015 Ξεκίνησα java, Δεν μπορώ να καταλάβω το module (Έτσι το λένε απο οτι εχω καταλάβει εννοώ το % ) γράφει 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, για να το ψάξει (και αυτό) λίγο)
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα