Παιδιά δύο παρατηρήσεις.
1. Πρέπει να χρησιμοποιείται την comp/compValue και την get όσο το δυνατόν λιγότερες φορές. Αυτό μπορείτε να το πετύχετε με το να μην κάνετε περιτά βήματα (όπως επιλέον if κλπ) καθώς και με το να αποθηκεύεται προσωρινά σε μια μεταβλητή τα αποτελέσματα των παραπάνω μεθόδων ώστε να μην χρειαστεί να τα καλείτε συνεχώς.
2. Επειδή έχει αναφερθεί από αρκετούς και πιθανώς να ευθύνεται ο τρόπος που το έγγραψα στην διαφάνεια, στην εργασία 5 με την παρεμβολή θα πρέπει όταν υπολογίζεται το pos είτε να γίνει casting είτε να γίνεται πρώτα ο πολλαπλασιασμός και μετά η διαίρεση (οι δύο τρόποι παρουσιάζονται παρακάτω).
- Κώδικας: Επιλογή όλων
pos =(int) (lo + (((double)(hi-lo)/(h-l))*(value-l)));
pos =lo + ( ( (hi-lo)*(value-l) )/(h-l) );
Για ποιον όμως λόγω χρειάζεται να γίνει αυτό; Ενώ όλα τα στοιχεία είναι ακέραιοι πρέπει να γίνει διαίρεση με αριθμούς οι οποίοι δεν διαιρούνται ακριβώς (εκτός αν εκτελεστεί ο πολλαπλασιασμός πρώτα). Οπότε πρέπει να γίνει double αρχικά ώστε να μην χάνουμε πληροφορία και μετά πάλι int. Με ένα απλό παράδειγμα:
(((hi-lo)/(h-l))*(value-l))= (35/10)*2 = 3*2=6
Ο υπολογιστής μας δίνει 6 ενώ το αποτέλεσμα που περιμέναμε είναι 7. Αυτό γίνεται γιατί εφόσον διαιρούνται δύο ακέραιοι δίνεται μόνο το ακέραιο μέρος της διαίρεσης. Οπότε ή θα πρέπει προς στιγήν αυτό να γίνει double, είτε να γίνει ο πολλαπλασιασμός πρώτα και μετά η διαίρεση. Σας παραπέμπω στην διαφάνεια 10 εργαστήριο 1 όπου αναφέρεται το casting.