4. Μαθηματικές πράξεις στην Python

Αριθμητικές πράξεις

Μια αριθμητική έκφραση είναι μια παράσταση η οποία περιέχει αριθμητικούς τελεστές, σταθερές τιμές και μεταβλητές. Με τους τελεστές ορίζουμε τις πράξεις που θα γίνουν με τα δεδομένα και παριστάνονται με σύμβολα όπως **  *  /   //  %  +  –  Η αποτίμηση μιας αριθμητικής έκφρασης γίνεται με την αντικατάσταση των μεταβλητών με τις τιμές τους. Με αυτό τον τρόπο έχουμε τον υπολογισμό της αριθμητικής παράστασης και την εμφάνιση της τιμής της. Στην Python μπορούμε να κάνουμε τις ακόλουθες αριθμητικές πράξεις:

#  Παραδείγματα
>>> a = 2
>>> b = 4
>>> c = 8
>>> a + b + c
14
>>> a + b - c
-2
>>> a * c
16
>>> c / a * b
16.0
>>> b ** a
16
>>> d = 3
>>> c % d
2

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

Μια αριθμητική παράσταση η οποία περιλαμβάνει περισσότερους από ένα τελεστές, η σειρά με την οποία η Python κάνει τις πράξεις ορίζεται από τους κανόνες προτεραιότητας και είναι οι ίδιοι όπως και στα Μαθηματικά. Χρησιμοποιώντας παρενθέσεις αναγκάζουμε την Python να εκτελέσει πρώτα τις πράξεις που περικλείονται στις παρενθέσεις.

Η προτεραιότητα των πράξεων όταν δεν έχουμε παρενθέσεις είναι η εξής:
(1) πρώτα η ύψωση σε δύναμη με τον τελεστή (**), στη συνέχεια
(2) ο πολλαπλασιασμός (*), η διαίρεση (/), η ακέραια διαίρεση (//) και το υπόλοιπο (%) και τέλος
(3) η πρόσθεση (+) και η αφαίρεση (-)

Όταν υπάρχουν πράξεις του ίδιου επιπέδου προτεραιότητας, τότε αυτές εκτελούνται στη σειρά από αριστερά προς δεξιά.

Ακρίβεια πράξεων με πραγματικούς αριθμούς στην Python

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

>>> a = 5.2
>>> b = 9
>>> print(5.2*9)
  46.800000000000004

Αριθμητικές πράξεις σε επίπεδο bit

Επίσης μπορούμε να κάνουμε πράξεις σε επίπεδο bit, μεταξύ ακέραιων τιμών. Συγκεκριμένα ορίζονται οι ακόλουθες πράξεις μεταξύ ακέραιων αριθμών:

# παραδείγματα
>>> x = 0b11100011
>>> y = 0b10101101
>>> bin(x << 2)
'0b1110001100'
>>> bin(y >> 3)
'0b10101'
>>> bin(x | y)
'0b11101111'
>>> bin(x & y)
'0b10100001'
>>> bin(x ^ y)
'0b1001110'

Build-in συναρτήσεις της Python

Η Python περιλαμβάνει μερικές built-in αριθμητικές συναρτήσεις που γίνονται πάνω σε αριθμητικές τιμές και συμβολοσειρές, που είναι οι ακόλουθες:

pow(x, y) ύψωση του πραγματικού αριθμού x στην δύναμη y
abs(x) απόλυτη τιμή του πραγματικού αριθμού x
round(x, n) στρογγυλοποίηση του πραγματικού αριθμού x σε n δεκαδικά ψηφία
int(x) μετατροπή του πραγματικού αριθμού x σε ακέραιο. (αποκόπτει τα δεκαδικά ψηφία)
int(‘n’) μετατροπή της συμβολοσειράς που περιέχει ακέραιο στον αντίστοιχο ακέραιο αριθμό.
float(‘x’) μετατροπή της συμβολοσειράς που περιέχει αριθμό κινητής υποδιαστολής στον αντίστοιχο αριθμό.
hex(n) ο ισοδύναμος δεκαεξαδικός αριθμός του ακεραίου αριθμού n
bin(n) ο ισοδύναμος δυαδικός αριθμός του ακεραίου αριθμού n

# παραδείγματα
>>> x = -2.0
>>> y = 3
>>> pow(x, y)
-8
>>> abs(x)
2.0
>>> round(1.1234, 2)
1.12
>>> round(1.1278, 2)
1.13
>>> z = 5.789
>>> int(z)
5
>>> int('589')
589
>>> float('23.897')
23.897
>>> h = 7953
>>> hex(h)
'0x1f11'
>>> bin(h)
'0b1111100010001'

Η βιβλιοθήκη math

Στην Python η βιβλιοθήκη math περιέχει συναρτήσεις με τις οποίες μπορούμε να κάνουμε μαθηματικές πράξεις όπως λογαριθμητικές πράξεις, τριγωνομετρικές πράξεις, ευρεση τετραγωνικής ρίζας κ.τ.λ. Για να μπορέσουμε να χρησιμοποιήσουμε αυτές τις συναρτήσεις θα πρέπει να εισάγουμε την βιβλιοθήκη math στην αρχή του κώδικα μας με την εντολή:

import math

παρακάτω δίνουμε τις κυριότερες συναρτήσεις της βιβλιοθήκης math με ορίσματα τους πραγματικούς αριθμούς:
math.ceil(x)  δίνει τον μικρότερο ακέραιο που είναι μεγαλύτερος ή ίσος του αριθμού x
math.e      δίνει τον αριθμό e
math.exp(x)  ύψωση του αριθμού e στην δύναμη x
math.fabs(x) δίνει την απόλυτη τιμή του αριθμού x
math.factorial(n) δίνει το παραγοντικό του ακεραίου n
math.floor(x)  δίνει τον μεγαλύτερο ακέραιο που είναι μικρότερος ή ίσος του αριθμού x
math.fsum(x) δίνει τον ακριβή πραγματικό αριθμό του αθροίσματος της ακολουθίας x
math.gcd(x, y) δίνει το Μέγιστο Κοινό Διαιρέτη των x και y
math.isnan(x) δίνει True αν ο x δεν είναι αριθμός
math.ldexp(x, i) δίνει την τιμή x*2i
math.log(x) δίνει το φυσικό λογάριθμο (βάση e) του πραγματικού αριθμού x
math.log10(x)  δίνει το λογάριθμο με βάση το 10 του πραγματικού αριθμού x
math.log2(x) δίνει το λογάριθμο με βάση το 2 του πραγματικού αριθμού x
math.pi    δίνει τον αριθμό π
math.sqrt(x)  δίνει την τετραγωνική ρίζα του αριθμού x
math.trunc(x) δίνει το ακέραιο μέρος ενός πραγματικού αριθμού

>>> import math
>>> math.pi
3.141592653589793
>>> math.e
2.718281828459045
>>> math.fabs(-98.56)
98.56
>>> math.factorial(4)
24
>>> math.floor(-3.5)
-4
>>> math.floor(3.5)
3
>>> math.ceil(-3.5)
-3
>>> math.ceil(3.5)
4
>>> math.fsum(range(3))
3.0
>>> math.factorial(4)
24
>>> math.log10(1000)
3
>>> math.log2(32)
5.0
>>> math.sqrt(16)
4.0
>>> math.trunc(-56.786)
-56

Επίσης με την βιβλιοθήκη math μπορούμε να κάνουμε τριγωνομετρικές πράξεις, όπως τις ακόλουθες:

math.acos(x) δίνει τη γωνία σε ακτίνια, της οποίας το συνημίτονο είναι το x (-1≤x≤1)
math.asin(x) δίνει τη γωνία σε ακτίνια της οποίας το ημίτονο είναι το x (-1≤x≤1)
math.atan(x) δίνει τη γωνία σε ακτίνια της οποίας η εφαπτομένη είναι το x
math.cos(x)  δίνει το συνημίτονο του αριθμού x εκφρασμένος σε ακτίνια.
math.sin(x)  δίνει το ημίτονο του αριθμού x εκφρασμένος σε ακτίνια.
math.tan(x)  δίνει την εφαπτομένη του αριθμού x εκφρασμένος σε ακτίνια.
math.degrees(x)  μετατρέπει τη γωνία x εκφρασμένης σε ακτίνια σε γωνίας εκφρασμένης σε μοίρες.
math.radians(x) μετατρέπει τη γωνία x εκφρασμένης σε μοίρες σε γωνία εκφρασμένης σε ακτίνια.

>>> import math
>>> math.acos(1)
0.0    # Επειδή το συνημίτονο των 0 ακτινίων είναι 1 τότε το τόξο συνημιτόνου
       #του αριθμού 1 ειναι 0.0
>>> math.asin(1)
1.5707963267948966
>>> math.degrees(1.5707963267948966)
90.0
>>> math.cos(math.pi/3) # Το συνημίτονο του αριθμού π/3 είναι 0.5
0.50000000000000000001
>>> math.sin(math.radians(30))# Το ημίτονο της γωνίας 30 μοιρών είναι ίσο με 0.5
0.49999999999999999994
>>> math.tan(math.radians(45)) # Η εφαπτομένη της γωνίας 45 εκφρασμένης σε μοίρες είναι ίσο με 1
0.9999999999999999999