Κυριακή 14 Νοεμβρίου 2010

Xcas: Μια απο τις ιδιαιτερότητες του

Πάνε μέρες που έχω υλοποιήσει ένα αλγόριθμο στο Xcas (μαθηματικό εργαλείο με το οποίο ασχολούμαστε στο μάθημα Υπολογιστικής Άλγεβρας) αλλά δεν μπόρεσα να βρώ το πρόβλημα (bug) που είχε, μέχρι απόψε. Ενώ ο αλγόριθμος έτρεχε κανονικά για μικρό αριθμό επαναλήψεων (πχ 500 ), για μεγαλύτερο αριθμό το πρόγραμμα έμπαινε σε Not Responding mode και τερμάτιζε αυτόματα. Έψαχνα για αρκετή ώρα  στον κώδικα για να βρώ που μπορεί να είναι το λάθος, κάνοντας print τα ενδιάμεσα αποτελέσματα, return(Lists) κλπ. Όλα δούλευαν όπως έπρεπε, εκτός απο την συνάρτηση nuage_points(List) η οποία παίρνει σαν όρισμα μια List και εκτυπώνει σε γραφική τα σημεία (x,y) που εμπεριέχει η λίστα αυτή. Λέω εδώ είναι το πρόβλημα! Δεν μπορούσα όμως να κάνω κάτι σχετικά με αυτό ,έτσι σκέφτηκα να χρησιμοποιήσω μια εναλλακτική συνάρτηση, η οποία ενεργοποιεί τα pixels της οθόνης στη γραφική παράσταση,δίνοντας σαν όρισμα το σημείο pixel (pixon(x,y) ). Τρέχοντας το πρόγραμμα μου προέκυψε ένα κατεβατό απο warnings τα οποία, όλα αναφέρονταν σε μια ανάθεση η οποία αφορούσε μια πράξη με την σταθερά pi. Εκεί, χωρίς δεύτερη σκέψη κατάλαβα ότι έψαχνα σε λάθος σημείο. Πήγα και αντικατέστησα όπου pi =3.14159265359 και προσπάθησα να τρέξω ξανά το πρόγραμμα. Το αποτέλεσμα; Το πρόβλημα είχε λυθεί!
Δεν έχω καταλάβει ακριβώς ποιο ήταν το πρόβλημα, αλλά αυτό που μπορώ να σκεφτώ είναι πως το Xcas αντιμετώπιζε δυσκολία στο να κάνει πράξεις με την σταθερά pi ενώ με την προσεγγιστική τιμή του δεν υπήρχε κανένα απολύτως πρόβλημα.
Χρησιμοποιώντας διάφορα εργαλεία προγραμματισμού μπορούμε να διαπιστώσουμε τις ιδιαιτερότητες του καθενός. Συγκρίνοντας με την C, τέτοιες σταθερές δηλώνονται ως #define pi 3.1415
και έτσι χρησιμοποιείται το pi σαν ο αριθμός 3.1415. Αντιθέτως, στο Xcas to pi είναι δεσμευμένη λέξη και αντιστοιχίζεται σε αυτή κατευθείαν η τιμή της(συμβολική ή πραγματική). Το παράδοξο έιναι πως, επειδή το Xcas χρησιμοποιεί διαφορετικούς τρόπους επίλυσης πράξεων, μπορεί να προκύψουν "προβλήματα" όπως το πιο πάνω.

(στην εικόνα πιο κάτω φαίνονται οι δύο διαφορετικές μορφές που αναπαριστάται το pi )


Μετά απο αρκετή ώρα σπαζοκεφαλίας, κατάλαβα πως ειδικά στον προγραμματισμό, ένα "λάθος" μπορεί να είναι πολύ καλά κρυμμένο. Ενώ αλλού φαινόταν αρχικά να υπάρχει το πρόβλημα, αλλού βρέθηκε. Η ανακάλυψη του βέβαια έγινε με λίγη δόση τύχης αλλά και επιμονής. Αν δεν χρησιμοποιούσα την εναλλακτική επιλογή ( pixon() ), το πιο πιθανό είναι πως ακόμα θα έψαχνα. Χρησιμοποιώντας εναλλακτικές επιλόγές για debugging είναι πολύ ευκολότερο να καταλήξουμε στο σφάλμα (το λογικό και όχι το συντακτικό) γιατί κάθε μέθοδος αποκαλύπτει το "πρόβλημα",εάν υπάρχει, απο διαφορετική οπτική γωνία.

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου