Βελτιστοποίηση Γ Κωδικός

T

tectona

Guest
Hi all,

Χρειάζομαι βοήθεια για να ur κωδικό Βελτιστοποίηση Γ.

Θέλω να ξέρω πώς αντικαταστήσει "%" & "/" στο Γ.

Στην αίτησή μου να χρησιμοποιήσω αυτή τη λειτουργία δύο για την εξεύρεση Υπενθύμιση & Quotient.

Όμοιος

6505/1000 = 6
6505% 1000 = 505

Plz, δώσε μου καλή λογική έτσι μπορώ να βελτιστοποιήσετε τον κωδικό μου

Ευχαριστώ εκ των προτέρων .........

Χαιρετισμοί
Tectona

 
Παράθεση:

Θέλω να ξέρω πώς αντικαταστήσει "%" & "/" σε C
 
διαίρεση με δύναμη του 2 είναι απλή από αριστερά στροφή
παράδειγμα

6505 / 16
6505>> 4
6505 / 1000 = (6505>> 3) / 125

 
Γεια σου, μην προσπαθήσετε να βελτιστοποιήσετε αυτό.Στις περισσότερες μεταγλωττιστές C ξέρω ότι αυτό γίνεται πολύ πολύ αποτελεσματικά.Μόνο μερικές οδηγίες ASM.

Αν θέλετε να βελτιστοποιήσετε:

Αφαίρεση:

Πολλαπλασιασμός λειτουργίες.Αν δεν είναι η αξία n ^ 2 * X
Division λειτουργίες.Αν δεν είναι η αξία X / n ^ 2
όλα τα άλλα μαθηματικά.
Προσπαθήστε να τα αντικαταστήσουν με το AND ή XOR.

Βελτιστοποίηση μέσα βρόχους.

Χρησιμοποιήστε look-up πίνακες αν είναι δυνατόν.αλλά δεν χρησιμοποιούν πολλαπλά προσπαθήσουμε dimentional array για να κολλήσει με μία διάσταση.

ΓΙΑ: xxtigerxx

Μια καλή C-compiler θα κάνει το ίδιο κωδικό για.

X = 6500/16 και Χ = 6500>> 4Πολ.

 
Υποθέτω ότι μικροϋπολογιστικά σας έχει αργή opcode διαίρεση, ή δεν εφαρμόζονται καθόλου, και δεν σας αρέσει ο κώδικας που παράγεται από C compiler σας.Δοκιμάστε την αναζήτηση καθαρή »για ένα καλύτερο compiler, ή την αναζήτηση ενός αλγορίθμου κατανομής βελτιστοποιηθεί για συγκεκριμένες μικροελεγκτή και compiler σας.

 
Thanks for ur υποστήριξη,

Εγώ αυτό που απαιτείται για τη μείωση βελτιστοποίηση μνήμης κώδικας και γρήγορη εκτέλεση.

Η χρήση μικροτσίπ 18στ ελεγκτή, σε αυτόν τον ελεγκτή, δεν υπάρχει εντολή διαίρεση έτσι compiler επιστρέψουν τη δική τους ρουτίνα για την εκτέλεση αυτής της βασικής arithmatic λειτουργία.

Χρησιμοποιώ Hi-Tech PICC18 compiler.

Θέλω γνωρίζω υπάρχει καμία μέθοδος για να οδηγήσει χρήση findout , - ή>>, <<, &, |.

Γιατί διαιρέτης μου είναι fix πω 1000.

Thanks for ur υποστήριξη.

Χαιρετισμοί
Tectona

 
αν είστε πάντα τη διαίρεση διά του 1000 δοκιμάστε κάτι σαν αυτό:

Κωδικός:/ * Έστω ότι διαίρεση 32 bit από τον αριθμό 1000

1000 είναι ένας αριθμός 12 bit * /# define SHFT (32 - 12)

int i?

int a = 1000 <<SHFT?

int μέρισμα = 6506?

int = υπόλοιπο μέρισμα?

int πηλίκο = 0?for (i = SHFT? i> = 0? i -)

(

πηλίκο <<= 1?

εάν (υπόλοιπο> = α)

(

πηλίκο ?

υπόλοιπο -= ένα?

)

a>> = 1?

)

/ * Πηλίκο και το υπόλοιπο είναι σωστά * /

 
Γεια jonw0224

Εκτελώ τον κωδικό σας σε compiler Γ (PICC 1

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Ψυχρός" border="0" />

αλλά αυτός ο κώδικας δεν μπορεί να λειτουργήσει.

Ευχαριστώ για την υποστήριξή σας.

Χαιρετισμοί
Tectona

 
Κωδικός jonw0224 απαιτεί 32-bit int.Ανακοίνωση για το "1000 <<SHFT".
Ίσως PICC έχει μικρότερο int.

 
echo47,

thanks, χρησιμοποιώντας sizeof () θα είναι πιο γενική.

-Jonathan

 
xxtigerxx συμβουλή είναι καλός τρόπος να ξεκινήσετε.μπορείτε να suboptimise περαιτέρω τον κωδικό σας εάν:
- Αξία των διαιρέτης είναι γνωστή και περιορίζεται στην περιοχή
- Να προσπαθήσει να αλλάξει διαχωριστή σε ισχύ στις 2 αν μπορείς και το μέγεθος όλα τα δεδομένα στην τιμή αυτή, που θα σας δώσει την ευκαιρία να αξιοποιήσουν λογικές πράξεις αντί του αριθμητικού
- Σε περίπτωση που αναζητούν για αλφαριθμητικό ρουτίνες μετατροπής, δείτε bcd ρουτίνες μετατροπής

Ακόμα, έχουν lok σε βιβλίο "Αλγόριθμοι για προγραμματιστές Ideasa και πηγή κώδικες".Νομίζω ότι είναι μια από τις καλύτερες βιβλίο για τέτοια θέματα βελτιστοποίησης.Αναζήτηση Google θα πρέπει να είναι διαθέσιμο δωρεάν, χάρη στους δημιουργούς.

 

Welcome to EDABoard.com

Sponsor

Back
Top