JPG Δημοσ. 2 Φεβρουαρίου 2003 Δημοσ. 2 Φεβρουαρίου 2003 Molis simera paratirisa oti sto MATH, tou API gia ta midlets den iparxoun methodoi gia ipologismo rizas, ipsosi se dinami klp. Exei ipopsin tou kanenas kapoia "bibliothiki"...etoimo kodika telos panton? Ftiaxno ena midlet to opoio xriazete tetoia pragmata. An oxi. Kserete kanena site, i pou allou telos panton tha bro mathimatikous algorithmous gia evresi rizas, logarithmous kai tetoia?
apoc Δημοσ. 2 Φεβρουαρίου 2003 Δημοσ. 2 Φεβρουαρίου 2003 Ελα δεν ειμαι ο ειδικος στο θεμα..αλλα πραγματικα οταν ειδα οτι το CLDC με java.lang.Math να υποστηριζει μονο basic arithmetic επαθα πλακα! Και μου κινησε το ενδιαφερον. Βασικα η πρωτη εναλλακτικη που σκεφτηκα..χωρις να ξερω αν εινα σωστη εινα να χρησιμοποιησεις το java.math πακετο. με την ΒιgInteger που παρεχει βεβαια τετοια function αλλα για αρκετα μεγαλους αριθμους. Μετα απο 5 λεπτα ψαξιμο βεβαια στο fora της μαμας Sun βρηκα το εξης ενδιαφερον.. 1. I don't know how well it would work, but you could look at the BigInteger and BigDecimal classes in the J2SE JDK, and see if you can port it to J2ME.They don't use any native methods, but it might be on the big side. They are quite general purpose though, so you may find that you can remove quite a bit of the code and still make them useful. Αυτο που σκεφτηκα και εγω..αλλα παλι δεν εινα η καλυτερη λυση 2. http://www.spruce.jp/float/ χεχε καποιοι το εχουν κανει για σενα πριν απο σενα οπως λενε! 3.και το αλλο ενδιαφερον ειανι το παρακατω simply grab the Float and Double classes from the j2se distribution. place them in your class path (make another jar file with j2me "extensions") . Καλη τυχη μας λες ποιο απ'ολα επαιξε...και μην ξεχνας ποτε τα fora της Sun...
Γηρυόνης Δημοσ. 4 Φεβρουαρίου 2003 Δημοσ. 4 Φεβρουαρίου 2003 GrMikeD: Ένα Java πρόγραμμα που τρέχει σε κινητά. JPG: στην πραγματικότητα είναι πολύ απλό να γράψεις ένα αλγόριθμο για υπολογισμό ύψωσγης σε δύναμη χρησιμοποιώντας αναδρομή. Το παρακάτω υπολογίζει έναν αριθμό υψωμένο σε μία δύναμη > public int power(int number, int pow) { if (pow == 0) return 1; else return number * power(number, pow-1); } Για τη ρίζα, λογάριθμο κλπ είναι λίγο πιο πολύπλοκο αλλά αν ξέρεις πως βγαίνει δε θα έχεις πρόβλημα.
bandito Δημοσ. 4 Φεβρουαρίου 2003 Δημοσ. 4 Φεβρουαρίου 2003 Υπάρχει ένας τρόπος να υπολογίζεις τετραγωνική ρίζα, λογάριθμο, και εκθετικές δυνάμεις με πολύ μεγάλη ακρίβεια και με φτηνές πράξεις (πολλαπλασιασμούς, προσθέσεις). Αν θέλεις μπορώ να στα γράψω εδώ.
Γηρυόνης Δημοσ. 4 Φεβρουαρίου 2003 Δημοσ. 4 Φεβρουαρίου 2003 Μπάντι ενδιαφέρομαι. Μάλλον με bits θα παίζεις. Αν σου είναι εύκολο γράψε τα
bandito Δημοσ. 5 Φεβρουαρίου 2003 Δημοσ. 5 Φεβρουαρίου 2003 Λογαριθμος:lnx Σειρά Taylor: ln(1-x) = -1 - (x^2)/2 - (x^3)/3 - ........ - (x^n)/n για 1-<x<1 Η παραπάνω προσεγγιστική σειρά συγκλίνει με σχετικά καλή ακρίβεια για τιμές του n μεγαλύτερες του 9, και με ακρίβεια αποκοπής για 64 bit για τιμές μεγαλύτερες του 15. Οπότε, για να υπολογίσεις τον λογάριθμο, κάνεις ένα scale στην περιοχή -1<x<1 υπολογίζεις το 1-x κτλ, κτλ Εκθετική:e^x Σειρά Taylor: e^x = 1 + x + (x^2)/2! + (x^3)/3! + ........ + (x^n)/n! Τα ίδια περίπου ισχύουν και εδώ για την ακρίβεια της σύγκλισης της σειράς. Στην πραγματικότητα η pow χρησιμοποιεί αυτές τις πράξεις για να υπολογίσει την δύναμη ώς εξής: a = x^y b = ylnx a = e^b Με τον συνδυασμό αυτών υπολογίζεις και την ρίζα.(x^0.5) Υ.Γ Οχι και με bits βρε Γηρυο....., δεν τρελάθηκα ακόμα. <img src="http://www.insomnia.gr/ubbthreads/images/graemlins/smile.gif" alt="" />
Γηρυόνης Δημοσ. 5 Φεβρουαρίου 2003 Δημοσ. 5 Φεβρουαρίου 2003 Χεχεχε εν τάξει υπέθεσα ότι θα έχεις βρει λύσεις πολύ low-level . Ερώτηση τώρα (δε θυμάμαι και πολλά από μαθηματικά). Η τιμή του n πού βασίζεται; Δεύτερον για να υπολογίσουμε τη ρίζα θα πρέπει πρώτα να βρούμε λογάριθμο και εκθετική; Σύμφωνα με τα παραπάνω πώς βρίσκουμε τη ρίζα του 5; Αν σου είναι εύκολο γράψε έναν τύπο.
bandito Δημοσ. 5 Φεβρουαρίου 2003 Δημοσ. 5 Φεβρουαρίου 2003 Η τιμή του n δεν βασίζεται κάπου συγκεκριμένα. Προφανώς τείνει στο άπειρο, αφού μιλάμε για απειροστικές σειρές. Προγραμματιστικά υπολογίζεις μια τιμή του n για την οποία η ακρίβεια σου ειναι ανεκτή, και την κρατάς σταθερή. Για να βρείς την ρίζα του 5 π.χ θα έκανες τα εξής: n=9 (π.χ) α = 5 ^ 0.5 b = 0.5 * ln 5 = 0,5 * 1,609437 = 0,8047189 α = e^b = 2,236066 Εγώ , υλοποιώντας τις παραπάνω μεθόδους για να βρίσκω δυνάμεις ρητων με ρητούς εκθέτες είχα μια ακρίβεια της τάξης του 3.10^-6. Αν χρησιμοποιήσεις, μεγαλύτερη ακρίβεια (n=15 και πάνω) , τότε η ακρίβεια ειναι πάρα πολύ μεγάλη. Σε ένα SUPER DUPER επεξεργαστή σαν αυτούς που αγοράζεις με 50 , μπορείς να βάλεις n=1000 και να βγάλεις σφάλμα αποκοπής ακόμα και για floating point 64 bits. Εγώ έπρεπε να το κάνω σε FIXED POINT 16 bits επεξεργαστή, με 100 ΜΗz συχνότητα λειτουργίας... Γι'αυτο και οι 9 επαναλήψεις μόνο EDIT: n=1000 μάλλον όχι γιατί 1000! = 4 * 10 ^2567. Αν και έχω την εντύπωση οτι στους 64αρηδες απεικονίζεται το παραπάνω. Τουλάχιστον εσωτερικά.
apoc Δημοσ. 5 Φεβρουαρίου 2003 Δημοσ. 5 Φεβρουαρίου 2003 η λυση οσο αναφορα την αποκοπη στα 64 bits τουλαχιστον στην java ερχεται μεσω BigNumbers , βεβαια εκει πλεον για να αvαkατασήσουν τους αριθμους χρησιμοποιουν αλλες βασεις (domain) .Δεν ειναι οτι πιο γρηγορο παρολα αυτα μπορεις να παιξεις ανετα με τοσο μεγαλους αριθμους ακομα και οταν μιλαμε περι ακριβειας σε floating point numbers. Παρολα αυτα για να επανελθω στο αρχικο προβλημα του φιλου μας. οι παραπανω αλγοριθμοι θελουν ln , παραγωγικα κτλ κτλ. τα οποια στο συγκεκριμενο Library που χρησιμοποιει δεν υποστηριζοντε καν! οποτε η τελειως hand made Λυση ειναι μαλλον κατα την γνωμη μου παρακινδυνευμενη , βεβαια ενταξει παρουσιαζει ακαδημαικο ενδιαφερον!
bandito Δημοσ. 5 Φεβρουαρίου 2003 Δημοσ. 5 Φεβρουαρίου 2003 apoc said: Παρολα αυτα για να επανελθω στο αρχικο προβλημα του φιλου μας. οι παραπανω αλγοριθμοι θελουν ln , παραγωγικα κτλ κτλ. τα οποια στο συγκεκριμενο Library που χρησιμοποιει δεν υποστηριζοντε καν! οποτε η τελειως hand made Λυση ειναι μαλλον κατα την γνωμη μου παρακινδυνευμενη , βεβαια ενταξει παρουσιαζει ακαδημαικο ενδιαφερον! Ποια εννοείς handmade λύση;;;;;
nodreams.ct Δημοσ. 5 Φεβρουαρίου 2003 Δημοσ. 5 Φεβρουαρίου 2003 Οι σειρές αυτές είναι πολύ καλές, συγγλίνουν γρήγορα.. υπάρχουν και αντίστοιχες για ημίτονο και συνημίτονο, αν θέλετε τις γράφω.
apoc Δημοσ. 5 Φεβρουαρίου 2003 Δημοσ. 5 Φεβρουαρίου 2003 Το να γραψεις τα function μονος σου , περι υπολογισμου ριζας κτλ κτλ!
bandito Δημοσ. 5 Φεβρουαρίου 2003 Δημοσ. 5 Φεβρουαρίου 2003 Δηλαδή τα library functions της Java έχουν μαγικά ξόρκια;;;;; Δεν ειναι καθόλου HandMade, σε προκαλώ να κάνουμε ένα test, να δούμε αν θα πετύχεις καλύτερη ακρίβεια και αν θα το κάνεις πιο γρήγορα με τα libraries της Java. Η library συναρτήσεις της C, κάνουν αυτό ακριβώς που σας έδειξα.
apoc Δημοσ. 5 Φεβρουαρίου 2003 Δημοσ. 5 Φεβρουαρίου 2003 Δεν εχω αποψη για το αν θα γινουν πιο γρηγορα..παρολα αυτα δεν νομιζω οτι μπορει να υπαρξη μεγαλη διαφορα στην επιδοση , μιας και τα αντιστοιχα library της Javα , πιστευω οτι ειναι εξισου optimized. Παρολα αυτα ειμαι οπαδος της αποψης οτι αφου εχει γραφτει κατι και κανει σε μεγαλο βαθμο την δουλεια σου , δεν χρειαζεται να το ξαναγραψεις μονο αν εχεις πραγματικα αναγκη! Aλλα δεν το ειπα να για να σνομπαρω...sorry αν ακουστηκε ετσι. ειπα ακαδημαικα και λογαριθμικά ειναι ενδιαφερουσες. Παρολα αυτα η παραπανω διαφωνεια μας.,.ειναι μια μεγαλη συζητηση..δηλαδη αν χρειαζεται και ειναι εφικτο να ανακαλυτεις τον τροχο καθε φορα ή να χρησιμοποιεις κατι ετοιμο και δοκιμασμενο..και να επικεντρωνεσαι σε application specific προβληματα!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.