Dvs Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 ola auta mou thimizoun algoritmiki protou examinou :>
GrMikeD Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 Re paidia, se oles tis glwsses autes oi prakseis einai ulopoimenes me seires taylor ktl. Ennoeitai auto! Afou o upologistis einai ena xazokouti kai tipota parapanw: mono prosthesi kserei apo prakseis! Pera apo auto omws, ennoeitai oti stis glwsses programmatismou einai built in sunartiseis. Auto simainei fusika kai oti einai pio optimized apo to na tis grapsei o programmatistis. Kai to kuriotero, kathe fora ekmetaleuodai tin arxitektoniki tou sustimatos prokeimenou na einai pio grigoro to apotelesma (blepe ormathopoiisi kai strassen gia pollaplasiasmo pinakwn, epilusi sustimatwn) alla to kuriotero, einai ulopoiimena polla kommatia tous se pio low level kwdika (blepe assembly) kai etsi taxuteroi polloi upologismoi. Auto ginetai pio eukola adilipto se periballoda gia mathimatikous upologismous opws i Matlab, pou diaferei poli i apodosi twn built in sunartisewn tis apo tis "handmade".
Γηρυόνης Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 Παιδιά λογικά όλοι οι αλγόριθμοι βασίζονται κάπου για υπολογίσουνε διάφορες τιμές. Προσωπικά και εγώ δεν πιστεύω ότι η μαθηματική βιβλιοθήκη της Java θα είναι γρηγορότερη/αργότερη από τις λύσεις που πρότεινε ο μπάντι (χωρίς βέβαια να έχω δει τον πηγαίο κώδικα). Τώρα γιατί οι developers της J2ME δε βάλανε κάποιες μαθημετικές βιβλιοθήκες μέσα είναι άγνωστο αφού πiστεύω ότι μερικά μικροδευτερόλεπτα παραπάνω δε θα κάνανε τη διαφορά. Όπως είπε και ο φίλος άποκ από μαθηματική/επιστημονική πλευρά έιναι αρκετά ενδιαφέρον (σε εμένα τουλάχιστον) αλλά από προγραμματιστική ίσως όχι και τόσο μιας και ήδη υπάρχουνε βιβλιοθήκες που τα κάνουνε αυτά. Μπαντι: Δηλαδή από ότι κατάλαβα ο αριθμός n είναι σταθερός και τον ορίζεις εσύ αναλόγως με το πόσο ακρίβεια θέλεις να έχει ο λογάριθμος. Όσο πιο μεγάλος είναι ο n τόσο μεγαλύτερη ακρίβεια θα έχουμε. Επίσης από ότι θυμάμαι από μαθηματικά το e είναι επίσης σταθερός αριθμός (2,7 ή κάνω λάθος.
apoc Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 εγω δεν εχω καταλαβει το scale Που λες στο -1<x<1
bandito Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 Γηρυόνης said: Παιδιά λογικά όλοι οι αλγόριθμοι βασίζονται κάπου για υπολογίσουνε διάφορες τιμές. Προσωπικά και εγώ δεν πιστεύω ότι η μαθηματική βιβλιοθήκη της Java θα είναι γρηγορότερη/αργότερη από τις λύσεις που πρότεινε ο μπάντι (χωρίς βέβαια να έχω δει τον πηγαίο κώδικα). Τώρα γιατί οι developers της J2ME δε βάλανε κάποιες μαθημετικές βιβλιοθήκες μέσα είναι άγνωστο αφού πiστεύω ότι μερικά μικροδευτερόλεπτα παραπάνω δε θα κάνανε τη διαφορά. Όπως είπε και ο φίλος άποκ από μαθηματική/επιστημονική πλευρά έιναι αρκετά ενδιαφέρον (σε εμένα τουλάχιστον) αλλά από προγραμματιστική ίσως όχι και τόσο μιας και ήδη υπάρχουνε βιβλιοθήκες που τα κάνουνε αυτά. Μπαντι: Δηλαδή από ότι κατάλαβα ο αριθμός n είναι σταθερός και τον ορίζεις εσύ αναλόγως με το πόσο ακρίβεια θέλεις να έχει ο λογάριθμος. Όσο πιο μεγάλος είναι ο n τόσο μεγαλύτερη ακρίβεια θα έχουμε. Επίσης από ότι θυμάμαι από μαθηματικά το e είναι επίσης σταθερός αριθμός (2,7 ή κάνω λάθος. Ακριβώς. Δεν είπα οτι χρειάζεται να ανακαλύπτεις τον τροχό, κάθε φορά που τον χρειάζεσαι, αλλά αν διάβασα καλά στην αρχή του μηνύματος και απο τα δικά σου λεγόμενα, δεν υπάρχουν αυτές οι βιβλιοθήκες. Επιπλέον ξεχνάτε οτι δεν γράφουν όλοι κώδικα για SUPER DUPER επεξεργαστές που τρέχουν στα 40 G και έχουν 80 GB μνήμη. Απλώς έγραψα ΠΩΣ υπολογίζονται αυτές οι τιμές ακόμα και στις βιβλιοθήκες. Και σε αυτά που έγραψα υπάρχουν βελτιστοποιήσεις (όπως το οτι η Taylor για την εκθετική δεν συγκλίνει γρήγορα όταν το δεκαδικό μέρος του εκθέτη ειναι μεγαλύτερο απο το 0.5 , αλλά και γι'αυτό υπάρχουν κόλπα). Όπως και άλλοι προσεγγιστικοί τρόποι (ημίτονα, συνημίτοντα, επαναληπτικές μεθόδοι κτλ). Γηρυο: Ο αριθμός n ειναι σταθερός κάθε φορά που εκτελείται ο αλγόριθμος, αλλά μπορεί να είναι παραμετροποιήσημος κάθε φορά που καλείται προς εκτέλεση. Ναι το e ειναι περίπου 2,71828. Είναι η λύση της εξίσωσης lnx = 1. Να σας θυμίσω οτι προγραμματιστικά οι αλγόριθμοι αυτοί ειναι πολύ χρήσιμοι. Δεν ειναι χρήσιμοι για SUPERO-DUPERO προγραμματισμό σε επεξεργαστές των 512 bit και σε συχνότητες των THz. .
bandito Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 apoc said: εγω δεν εχω καταλαβει το scale Που λες στο -1<x<1 To scaling ειναι ενα μαθηματικό τρυκ , τίποτα παραπάνω..... Π.χ όταν έχεις 16 bits ο αριθμός 1000 μπορείς να πείς οτι ειναι ο αριθμός 1000/32768 = 0,030517578125 (32768 ειναι ο μέγιστος αριθμός (ακέραιος) κατα απόλυτη τιμή που μπορεί να αναπαρασταθεί με 16 bits). Οποτε αν εχεις τον αριθμό α , μπορείς να τον γράψεις α = C(1-x), όπου C=2^n Οπότε lna = lnC + ln(1-x)....... Το lnC δεν ειναι απαραίτητο να υπολογιστεί μπορεί να ειναι lookup.
apoc Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 α μαλιστα μαλιστα ναι ναι εισαι κατανοητος! Thanks! Ε απο τα λιγα που ξερω με μια ενασχοληση που ειχα καποτε με BigNumbers το scaling (οπως το περιγραφεις) ειναι η τεχνικη που κανει εφικτη τον υπολογισμο τοσο μεγαλων αριθμων που φευγουν απο το address space των 32bit επεξεργαστων!
Γηρυόνης Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 bandito said: To scaling ειναι ενα μαθηματικό τρυκ , τίποτα παραπάνω..... Π.χ όταν έχεις 16 bits ο αριθμός 1000 μπορείς να πείς οτι ειναι ο αριθμός 1000/32768 = 0,030517578125 (32768 ειναι ο μέγιστος αριθμός (ακέραιος) κατα απόλυτη τιμή που μπορεί να αναπαρασταθεί με 16 bits). Δε θα έπρεπε τότε η κλίμακα να είναι -1<x<=1; Ο μέγιστος ακέραιος πάντα θα μας δίνει 1.
apoc Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 Ε κατσε αναλογα αν μετρας και το bit του προσημου! σωστα?
bandito Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 Ακριβώς......... Τα 16 bits προσημασμένα έχουν -32767<x<32768 Το πρόσημο θα προέλθει απο το αριθμό και όχι απο τον διαιρέτη.
Γηρυόνης Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 Ναι, το ξέρω αυτό (2^15 - 1) εσύ όμως μίλησες για *απόλυτη τιμή* που μπορεί να αναπαρασταθεί. ʼρα αν η απόλυτη τιμή που αναπαριστάται είναι το όριο τότε πάντα θα έχουμε 1.
bandito Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 Έχεις δίκιο Γυρόνη, δεν είδα το = στην ανίσωση που έγραψες. Δεν είναι πρόβλημα όμως αυτό, απλώς κάνεις ένα έλεγχο για την μια και μοναδική περίπτωση του 1....
Γηρυόνης Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 Λοιπόν είναι κάποια πράγματα που ακόμα δεν καταλαβαίνω: Εκθετική:e^x Το e εδώ είναι σταθερά, έτσι; Σειρά Taylor: e^x = 1 + x + (x^2)/2! + (x^3)/3! + ........ + (x^n)/n! Οπότε με το παραπάνω βρίσκεις τη σταθερά e υψωμένο σε κάποια δύναμη. Τί γίνεται όμως αν θέλω να υπολογίσω το 12^4. Ποιόν τύπο χρησιμοποιώ; Αν περάσω δύο παραμέτρους (το n το παίρνω ως σταθερό) χ (εκθέτης) και ψ (βάση) σε μία συνάρτηση πώς βρίσκω το τελικό αποτέλεσμα; Από τη σειρά Taylor προκύπτει μόνο το χ, το ψ ποιό ρόλο έχει μέσα σε όλη τη σειρά; Επίσης η κλιμάκωση του χ (-1<χ<1) παίζει κάποιο ρόλο εδώ ή χρειάζεται μόνο για το λογάριθμο;
bandito Δημοσ. 6 Φεβρουαρίου 2003 Δημοσ. 6 Φεβρουαρίου 2003 >float custom_pow(int n, float x, float y) //calculates x^y with n as the number of loops { float tmp; tmp = y * log_taylor(x, n); return exp_taylor (tmp, n); } float exp_taylor (float x, int n); //calculate e^x float log_taylor (float x, int n); //calculate lnx Για το 12^4: Οταν έχουμε μόνο ακέραιους δεν χρησιμοποιούνται αυτές οι μέθοδοι, μόνο πολλαπλασιασμοί. Αλλά για το 12,2 ^4,33: Το windows calculator δίνει: 50575,253330548339888372861841034 Η handmade pow θα δίνει: tmp = 4,33 * ln12,2 = 4,33 * 2,501435 = 10,83121767 και τέλος 12,2 ^ 4,33 = e^10,83121767 = 50575,253330548338808160979640082 Απόλυτο σφάλμα: 1,08 * 10^(-12) Σχετικό σφάλμα: 2,13 * 10^(-17)
Γηρυόνης Δημοσ. 7 Φεβρουαρίου 2003 Δημοσ. 7 Φεβρουαρίου 2003 bandito said: Για το 12^4: Οταν έχουμε μόνο ακέραιους δεν χρησιμοποιούνται αυτές οι μέθοδοι, μόνο πολλαπλασιασμοί. Όντως... καμία φορά η λύση είναι τόσο απλή... Αλλά για το 12,2 ^4,33: Το windows calculator δίνει: 50575,253330548339888372861841034 Η handmade pow θα δίνει: tmp = 4,33 * ln12,2 = 4,33 * 2,501435 = 10,83121767 και τέλος 12,2 ^ 4,33 = e^10,83121767 = 50575,253330548338808160979640082 Απόλυτο σφάλμα: 1,08 * 10^(-12) Σχετικό σφάλμα: 2,13 * 10^(-17) Εν τάξει τώρα κατάλαβα. Είχα μπερδευτεί με τα τρία βήματα που παράθεσες νωρίτερα: a = x^y b = ylnx a = e^b Δεν μπορούσα να καταλάβω που κολλάει η πρώτη γραμμή <img src="http://www.insomnia.gr/ubbthreads/images/graemlins/confused.gif" alt="" /> Νόμιζα ότι έπρεπε να την υπολογίσω πρωτού υπολογίσω το β. Τώρα απλώς την αγνοώ <img src="http://www.insomnia.gr/ubbthreads/images/graemlins/grin.gif" alt="" /> Θα με βοηθούσες πιο πολύ αν έκανες εξαρχής: x^y = e^b όπου b=ylnx
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.