oxide Δημοσιεύτηκε Νοέμβριος 3, 2007 #1 Κοινοποίηση Δημοσιεύτηκε Νοέμβριος 3, 2007 καλημερα. θελω να κανω ενα προγραμματακι σε c για μετατροπη απο δεκαδικο σε binary βασικα ομως το προβλημα μου δεν σχετιζεται αμεσα με το τι θα κανει το προγραμμα. απλα οσον αφορα την εντολη printf δεν μπορω να την κανω να τυπωσει μεγαλους σε ψηφια αριθμους.... στη καλυτερη μου κοβει τα ψηφια. τον αριθμο που θα δεχεται τον εχω δηλωσει σαν double και για αρχη θελω να τον τυπωσω οσο μεγαλος και να ειναι(δεν εννοω να εχει εκατομυρια ψηφια ). πως να το κανω αυτο? ευχαριστω Link to comment Share on other sites More sharing options...
DarkSaga Νοέμβριος 3, 2007 #2 Κοινοποίηση Νοέμβριος 3, 2007 στο printf τη format specifier βάζεις? Link to comment Share on other sites More sharing options...
oxide Νοέμβριος 3, 2007 Author #3 Κοινοποίηση Νοέμβριος 3, 2007 εβαλα %g αλλα δοκιμασα και κατι n νομιζω..απο εκει λυνεται το προβλημα αλλα δεν ξερω τι να βαλω Link to comment Share on other sites More sharing options...
DarkSaga Νοέμβριος 3, 2007 #4 Κοινοποίηση Νοέμβριος 3, 2007 δοκίμασεις να το περάσεις σαν string? %s σαν %f %http://www.cplusplus.com/reference/clibrary/cstdio/printf.htmlδείξε τον κώδικα σουπεριορισμό στο μέγεθος του αριθμού που μετατρέπεις τι έχεις?http://www.c.happycodings.com/Miscellaneous/code9.html Link to comment Share on other sites More sharing options...
oxide Νοέμβριος 3, 2007 Author #5 Κοινοποίηση Νοέμβριος 3, 2007 Αρχική απάντηση από DarkSagaπεριορισμό στο μέγεθος του αριθμού που μετατρέπεις τι έχεις? απο το hardware?(ειπα βλακεια?)σαν string δεν το δοκιμασα γτ ειχα την εντυπωση οτι δεν μπορω να κανω πραξεις ...κανω λαθος?το προγραμμα στο δευτερο λινκ ειναι μονο μεχρι το 255 εμενα με ενδιαφερουν και μεγαλυτεροι αριθμοιβεβαια ομολογω πως σαν αρχαριος στη c δεν ξερω τις εντολες scanf και την δηλωση void οποτε απλα μπορει να μην βλεπω κατι.τωρα το προγραμμα θα το καταφερω απλα δεν μπορω να το κανω να τυπωσει μεγαλους αριθμους μεταβλητης υποδιαστολης Link to comment Share on other sites More sharing options...
defiant Νοέμβριος 3, 2007 #6 Κοινοποίηση Νοέμβριος 3, 2007 Δηλωσε τον αριθμο σαν long και στη scanf και printf βαλε %ldΓια ποσο μεγαλο αριθμο λες? Link to comment Share on other sites More sharing options...
DarkSaga Νοέμβριος 3, 2007 #7 Κοινοποίηση Νοέμβριος 3, 2007 Αρχική απάντηση από oxide[/b μεγαλους αριθμους μεταβλητης υποδιαστολης τι εννοείς?ένα %lf ή %ld θα σου έκανε δουλειά μάλλοντσέκαρες τη σελίδ που σου έδωσα να δεις τo l(Length) υπέθεσα πως λύνεις άσκηση.σου διευκρινίζει πόσο μεγάλους αριθμούς πρέπει να υποστηρίξεις?σκέψου ότι ακόμα και το 1024 θέλει 10 νουμερα για να το εκφράσεις δυαδικά.καινα ξέρεις πως η λύση είναι στην ήδη διδαχθείσα ύλη αν κάτι που σου προτείνουμε δεν το έχεις συναντήθει καλύτερα να το προσπεράσεις για να μη σε μπλέξουμε Link to comment Share on other sites More sharing options...
Jaco Νοέμβριος 3, 2007 #8 Κοινοποίηση Νοέμβριος 3, 2007 Επειδή το είχα κοιτάξει παλιότερα το ζήτημα είχα καταλήξει στα εξής χωρίς όμως να είμαι 100% ακριβείς γιατί δεν τα θυμάμαι... στην C όπως και στις περισσότερες γλώσσες προγραμματισμού, τα float numbers δεν "ανοίκουν" στην ίδια την γλώσσα, αλλά περιγράφονται από διεθνή πρωτόκολλα (όπως το ΙIEEE-754 ) για την Ansi C... αυτό έχει τα καλά του και τα αρνητικά του... ο double είναι στην ουσία ένας float και ονομάζεται έτσι επειδή είναι το "double precision" του float ("single precision"), δηλαδή έχει δυο φορές ακρίβεια μεγαλύτερη από τον float... αυτό απλά σημάινει ότι είναι τα διπλά bits, δηλαδή 64-bits αντί για 32 του float... όλα αυτά τα γράφω σαν συλλογισμό που οδηγεί στα παρακάτω...το πρωτόκολλο ναι μεν υποστηρίζει την μοντελοποίηση και στην ουσία αποθήκευση τόσο μεγάλων αριθμών, όμως δεν σημαίνει ότι και η C μπορεί να τους αναπαραστήσει... Δηλαδή, ενώ η standard lib και η μηχανή της C μπορεί να τους αποθηκεύσει σαν ΙΕΕΕ-754 double precision numbers, ωστόσο δεν μπορεί να αναπαραστήσει πάνω από 10 δεκαδικά όταν της ζητηθεί, λόγο δικού της περιορισμού... άρα αυτό είναι περιορισμός της ίδιας της C αλλά και πάλι το ίδιο το ΙΕΕΕ-754 μπορεί να σου δώσει μόνο μέχρι τόσο...: 0x7fef ffff ffff ffff ~ 1.7976931348623157 x 10^308, δηλαδή 16 δεκαδικά...Αυτό λύνεται με κάποια τρικ στον κώδικα ένα από τα οποία είναι το εξής... έχεις τον αριθμό x=1.7976931348623157 τον οποίο θέλεις να τον κάνεις print...Η C βλέπει αυτό: 1.7976931348623157... δηλαδή ενώ έχει πραγματικά αποθηκευμένο όλο τoν αριθμό μπορεί να σου τυπώσει μόνο το bold μέρος, λόγο του περιορισμού των 10-bits... οπότε εσύ φτιάχνεις ένα καινούργιο double π.χ. y και λές:y=x*10^6 = 17976931348.623157και τώρα η C μπορεί να το δει όλα τα δεκαδικά... δηλαδή "σμπρώχνεις" μπροστά τα ψηφία πολ/ντας επί μια δύναμη του 10...Με τον τρόπο αυτό τα σώζεις σε ένα char[] αυτά που θες με την υποδιαστολή όπου θες και είσαι οκ...Γενικά αυτό είναι ένα κόλπο για να τυπώνεις πολλά δεκαδικά ψηφία... το πρόβλημα είναι όμως όταν θες να κάνεις πράξεις με αυτά...λόγο του περιορισμού της C και επειδή τα στρογγυλοποιεί, πρέπει να χρησιμοποιείς μεθόδους με πράξεις πινάκων μετασχηματισμών, όπως για παράδειγμα FFT πινάκων... μόνο με αυτό τον τρόπο μπορείς να κάνεις υπολογισμούς με τόσο μεγάλη ακρίβεια και είναι πολύ δύσκολο να υλοποιήσεις τέτοιους αλγορίθμους... δυστυχώς δεν θα βρεις κώδικα για αυτούς... είναι επτασφράγιστα μυστικά των guru του είδους... π.χ. με FFT πολ/σμους και διαιρέσεις δουλεύει και το super pi... Link to comment Share on other sites More sharing options...
oxide Νοέμβριος 3, 2007 Author #9 Κοινοποίηση Νοέμβριος 3, 2007 σας ευχαριστω ολους για τις απαντησεις...@darksaga Οχι δεν λυνω ασκηση απλα επειδη μου αρεσε η c σαν γλωσσα,εκτιμισα οτι εχει παρα πολλες δυνατοτητες και ειπα να την μαθω μια ωρα αρχιτερα ,ενω θα ασχολουμε και με διαδικο συστημα λιγο πολυ το οποιο κανουμε σε αλλο μαθημα.@defiant δεν λεω καποιο συσκεκριμενο απλα θεωρω οτι μεχρι το 255 θα ηταν πολυ περιορισμενων δυνατοτητων το προγραμματακι.@jaco ωραιο το κολπακι πρεπει να ειχαμε πει και στη σχολη αλλα δεν το θυμομουν...και τα υπολοιπα πολυ χρησιμα και για αργοτερα.υγ για τους περιεργους... στο ΠΑΜΑΚ ειμαι εφαρμοσμενη Link to comment Share on other sites More sharing options...
DarkSaga Νοέμβριος 3, 2007 #10 Κοινοποίηση Νοέμβριος 3, 2007 ξέχνα την C ξεκίνα c++ ή Javaπερισσότερες δυνατότητες καλύτερη διαχείριση των πάντων και πολύ πιο οργανωμένεςαφού το κάνεις για σένα διάλεξε κάτι που είναι και πιο εφαρμόσιμο /πρακτικό και πιο δυνατό/σωστό Link to comment Share on other sites More sharing options...
oxide Νοέμβριος 3, 2007 Author #11 Κοινοποίηση Νοέμβριος 3, 2007 το 3ερω οτι η c++ ειναι πανισχυρη αλλα μιας και την c την κανω στη σχολη ειπα να ασχοληθω με αυτη.το προγραμμα αυτο μπορει με μικροαλλαγες να μεταφερθει στην ++και να εκτελειτε πχ με το πατημα ενος κουμπιου?αυτο που θελω να πω ειναι οι εντολες ιδιες και στην ++ η μπααα..?να φανταστω οτι εκει δεν ταλαιπωρησε με βιβλιοθηκες????? Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.