Γενικό Λύκειο > Θεωρία

Κατηγορίες λαθών

<< < (2/6) > >>

alkisg:
Το πρώτο είτε θα προκαλέσει λάθος χρόνου εκτέλεσης (underflow/div-by-zero/out-of-ram) είτε θα εκτελείται επ' άπειρο χωρίς κανένα εμφανές λάθος, ανάλογα με το runtime system που τρέχει.

Το δεύτερο ναι είναι λογικό λάθος γιατί δεν αντιστοιχεί σε επίλυση κάποιας συγκεκριμένης εκφώνησης, εντός της επανάληψης δεν αλλάζουν ούτε το x ούτε το i. Αποκλείεται δηλαδή να είναι αυτό που στόχευε να κάνει ο προγραμματιστής του.

Για το πρώτο δεν μπορούμε να πούμε ότι έχει λογικό λάθος, αφού κάνει ακριβώς αυτό που ήθελε ο προγραμματιστής του, προσπαθεί να φτάσει στα όρια της ακρίβειας των πραγματικών. Όμως αυτή η επιδίωξη έρχεται σε αντίθεση και ακυρώνει την υπόθεση ότι η "ΓΛΩΣΣΑ έχει όσο μεγάλη ακρίβεια χρειάζεται για την επίλυση του προβλήματος", οπότε για τη ΓΛΩΣΣΑ είναι λάθος παράδειγμα.

Προσοχή, υπάρχουν λάθη χρόνου εκτέλεσης που συγχρόνως είναι και λογικά λάθη. Τα λογικά λάθη μπορούν να εμφανιστούν είτε κατά το linting είτε ως λάθη χρόνου εκτέλεσης είτε καθόλου, οπότε τότε τα καταλαβαίνουμε μόνο αν το πρόγραμμα δεν κάνει αυτό που θέλαμε.

bugman:
Underflow δεν εχω δει ποτέ. Δεν υπάρχει ούτε σε flag στον επεξεργαστή. Οι αριθμοί double 80bit έχουν την infinite ως θετικό άπειρο και αρνητικό άπειρο. Επιπλέον αν κάποιος βάλει με κάποιο τρόπο κάποια bit μπορεί να σχηματίσει NaN δηλαδή Not a Number.
Η συνεχόμενη διαίρεση θα βγάλει το 0.

Παίζει το 1/2 να δίνει 1 αν έχουμε πριν την εκχώρηση ακέραια τιμή με σχολική ακρίβεια, όπου η μισή μονάδα γίνεται ολόκληρη. Έτσι το 1/2 θα δίνει 1 στην εκχώρηση  έτσι συνέχεια η τιμή το Χ θα είναι 1. (Αυτό μπορεί να γίνει πχ στην Μ2000 σε ακέραιες μεταβλητές που στην εκχώρηση τιμής γίνεται στρογγυλοποίηση στο 0.5)


Να προσθέσω εδώ ότι υπάρχουν και άλλες αναπαραστάσεις αριθμών όπου πχ το 0.2 γράφεται επακριβώς ως 0.2. Αυτοί είναι οι τύπου Decimal με 29 ψηφία όπου το σημείο των δεκαδικών μπορεί να πάει παντού βάσει ενός εσωτερικού εκθέτη στο 10. Στην ουσία έχουμε ακέραια τιμή 96bit.

alkisg:
https://en.wikipedia.org/wiki/Arithmetic_underflow
"The occurrence of an underflow may set a ("sticky") status bit, raise an exception, at the hardware level generate an interrupt, or may cause some combination of these effects. "

Μην περιορίζεσαι στον επεξεργαστή που έχεις στο σπίτι και στο τι έχεις δει στα runtime systems που δοκίμασες.
Επιπρόσθετα, οι πράξεις μπορούν να τρέχουν σε software, όχι hardware, με τη βοήθεια βιβλιοθήκης. Υπάρχουν βιβλιοθήκες "άπειρης ακρίβειας", αυτές θα συνεχίσουν μέχρι να τελειώσει η RAM (το out-of-ram που έγραψα).

Δεν νομίζω όμως ότι χρειάζεται να επικεντρωθούμε στο "τι είδους runtime error μπορεί να βγάλει", το ζητούμενο είναι ότι είτε θα βγάλει runtime error είτε θα εκτελείται για πάντα.

alkisg:
Χθες μια μαθήτρια με ρώτησε "Τελικά τι λάθος είναι το Χ/0; Στο σχολείο μας είπαν ότι είναι λογικό λάθος, ενώ στο φροντιστήριο ότι είναι λάθος χρόνου εκτέλεσης και ότι τα λογικά λάθη δεν προκαλούν διακοπή της εκτέλεσης".

...ελπίζω να μην πέσει στις Πανελλαδικές, θα δυσκολευτούμε να συμφωνήσουμε ότι το σωστό είναι "και τα δύο"...  :-[

din_os:
Χμμ, έκανα το μάθημα πρόσφατα και δεν περίμενα να δώ εδώ τέτοια συζήτηση, σύμφωνα με τα 2 βιβλία αυτό που κατάλαβα είναι:
- Συντακτικό λάθος, ανακαλύπτεται πρίν την εκτέλεση.
- Λάθος κατά την εκτέλεση, με αποτέλεσμα να κάνει "crash" όπως λέει και το βιβλίο επειδή μια συσκευή δεν βρέθηκε, μια τιμή χρήστη το προκάλεσε
- Λογικό λάθος, δεν ανακαλύπτεται από τα παραπάνω, μόνο άνθρωπος μπορεί να τα βρεί, (ή ίσως ΑΙ αν το πάμε βαθιά)

Πρίν πάω στις ερωτήσεις να δείξω ένα λογικό λάθος π.χ. να έχουμε αλγόριθμο που να βρίσκει μέσο όρο και να κάνει λάθος πράξη π.χ. εδώ ξέχασε ο προγ/στης τις παρενθέσεις:

Διαβασε α, β
Γραψε 'Ο μέσος όρος είναι ',  α + β / 2

Σύμφωνα με αυτά λοιπόν οι ερωτήσεις (ταπεινή γνώμη):

Τι λάθος είναι το 1/0;
Κανονικά χρόνου εκτέλεσης, αλλά μπορεί να βρεθεί και με static code analysis (lint). Δεν μπορεί όμως να θεωρηθεί συντακτικό.
- Συμφωνώ

Υπάρχουν λογικά λάθη που να μην προκαλούν λάθη χρόνου εκτέλεσης;
Ναι

Υπάρχουν λάθη χρόνου εκτέλεσης που να μην είναι λογικά;
Ναι

Τι λάθος είναι η ΓΡΑΨΕ εντός συναρτήσεων;
Συντακτικό

Πλοήγηση

[0] Λίστα μηνυμάτων

[#] Επόμενη σελίδα

[*] Προηγούμενη σελίδα

Μετάβαση στην πλήρη έκδοση