Η ύψωση σε δύναμη δίνει πραγματικό αριθμό;

Ξεκίνησε από Wizard, 27 Σεπ 2008, 06:15:51 ΜΜ

« προηγούμενο - επόμενο »

Wizard

Γιατί ο διερμηνευτής θεωρεί ότι η ύψωση σε δύναμη δίνει πραγματικό αριθμό; π.χ. γιατί το α <- β^γ δεν θεωρείται έγκυρο αν η α είναι ακέραια, ενώ και οι β,γ είναι ακέραιες;

alkisg

Από τη βοήθεια, https://alkisg.mysch.gr/ΓΛΩΣΣΑ/Τελεστές/:

^ (δύναμη): ισχύει για τους ακέραιους και τους πραγματικούς. Το αποτέλεσμα είναι συνήθως πραγματικός αριθμός, εκτός αν ο εκθέτης είναι θετικός ακέραιος σταθερής αποτίμησης. Για παράδειγμα το 2^2 είναι ακέραιος, ενώ το 2^-2 πραγματικός (= 0.25). Έτσι στην γενική περίπτωση το 2^ι εκλαμβάνεται σαν πραγματικός αριθμός.

Wizard

α, μάλιστα  :) Δεν σκέφτηκα να κοιτάξω τη βοήθεια  :-[

Wizard

Επανέρχομαι στο θέμα γιατί στις επαναληπτικές ημερησίου 2004, θέμα 2 (αριθμοί Μέρσεν), υπάρχουν οι εντολές:

D <- (2^A) – 1
E <- B MOD D


Μπορούμε να θεωρήσουμε ότι γενικά υπάρχει "λάθος" στον αλγόριθμο (αν π.χ. ο χρήστης δώσει για Α την τιμή  -2);

alkisg

Το Α=-2 απαγορεύεται από τον ορισμό των αριθμών Μέρσεν, απλά δεν ασχολήθηκαν με έλεγχο δεδομένων εισόδου.
Πέρα από αυτήν την παράλειψη, δεν μπορούμε να θεωρήσουμε ότι ο αλγόριθμος είναι λάθος, γιατί είναι ψευδογλώσσα και όχι πρόγραμμα, και στην ψευδογλώσσα δεν υπάρχουν τύποι δεδομένων.
Εντωμεταξύ, όλοι οι αριθμοί που μπαίνουν σαν εκθέτες είναι θετικοί (το 2^Α και το 2 ^ (C – 1)). Επομένως αν ο αλγόριθμος υλοποιούνταν σε κάποια άλλη ΓΛΩΣΣΑ προγραμματισμού, που θα είχε τύπο δεδομένων ΘΕΤΙΚΟΙ: Α, C, θα μπορούσαμε να θεωρήσουμε ότι όλες οι μεταβλητές του αλγορίθμου είναι ΘΕΤΙΚΕΣ, και επομένως όλες οι δυνάμεις επίσης θετικοί ακέραιοι.

Το ίδιο θα μπορούσε να γίνει και στη ΓΛΩΣΣΑ με τη συνάρτηση "ακέραιο μέρος" που ουσιαστικά θα έκανε απλά type casting:
D ← Α_Μ((2 ^ A) – 1)

Πάντως στην ψευδογλώσσα δεν ασχολούμαστε ούτε με τύπους δεδομένων ούτε με τις μετατροπές μεταξύ τους, οπότε τα πράγματα είναι πιο χαλαρά. Αν δεν κάνω λάθος έχουν και παράδειγμα με
Α[N/2] <- κάτι
όπου βάζουν πραγματικό αριθμό σαν δείκτη πίνακα, απλά επειδή "τυχαίνει" το Ν να είναι πάντα άρτιο στη συγκεκριμένη γραμμή και επομένως το Ν/2 πάντα ακέραιος.

happiness

Τι γίνεται όταν γράφουμε το ίδιο πρόγραμμα σε ΓΛΩΣΣΑ; Μια άσκηση που έχει
α<-β^γ

με όλες τις μεταβλητές ακέραιες, είναι λάθος;

alkisg

Είναι συντακτικό λάθος.
https://alkisg.mysch.gr/ΓΛΩΣΣΑ/Τελεστές/: "Το αποτέλεσμα είναι συνήθως πραγματικός αριθμός, εκτός αν ο εκθέτης είναι θετικός ακέραιος σταθερής αποτίμησης. Για παράδειγμα το 2^2 είναι ακέραιος, ενώ το 2^-2 πραγματικός (= 0.25). Έτσι στην γενική περίπτωση το 2^ι εκλαμβάνεται σαν πραγματικός αριθμός."

happiness

Άρα είναι λάθος να το χρησιμοποιούμε στις ασκήσεις;