Corrigé TDTP1
Corrigé TDTP1
Corrigé TDTP1
20
, b = 4.125 et c = −28.8625 .
17
a = = 0.85
20
0.85 ∗ 2 = 1.7 → 1
0.7 ∗ 2 = 1.4 → 1
0.4 ∗ 2 = 0.8 → 0
0.8 ∗ 2 = 1.6 → 1
0.6 ∗ 2 = 1.2 → 1
0.2 ∗ 2 = 0.4 → 0
…
17
a = = 0.85 = (0.11 0110 0110 0110 …)2
20
b = 4.125
4 = 2 ∗ 2 + 0
2 = 2 ∗ 1 + 0
1 = 2 ∗ 0 + 1
donc 4 = (100)2 .
0.125 ∗ 2 = 0.250 → 0
0.250 ∗ 2 = 0.5 → 0
0.5 ∗ 2 = 1.0 → 1
0. ∗ 2 = 0 → 0
28 = 2 ∗ 14 + 0
14 = 2 ∗ 7 + 0
7 = 2 ∗ 3 + 1
3 = 2 ∗ 1 + 1
1 = 2 ∗ 0 + 1
28 = (11100)2
0.8625 ∗ 2 = 1.725 → 1
0.725 ∗ 2 = 1.45 → 1
0.45 ∗ 2 = 0.9 → 0
0.9 ∗ 2 = 1.8 → 1
0.8 ∗ 2 = 1.6 → 1
0.6 ∗ 2 = 1.2 → 1
0.2 ∗ 2 = 0.4 → 0
0.4 ∗ 2 = 0.8 → 0
…
0.8625 = (0.1101 1100 1100 …)2
et par suite
c = −28.8625 = (−11100.1101 1100 1100 …)2
b et c
en base 10
17 0 0
a = = 0.85 = (−1) × 0.85 × (10)
20
0 1
b = 4.125 = (−1) × 0.4125 × (10)
1 2
c = c = −28.8625 = (−1) × 0.288625 × (10)
en base 2
0 0
a = (0.11 0110 0110 0110 …)2 = (−1) × 0.11 0110 0110 0110 … × 2
0 3=(11)2
b = (100.001)2 = (−1) × 0.100001 × 2
4) Déterminer la représentation au format simple précision suivant la norme IEEE 754 des nombres , a b
et . c
a=
0 −1
(−1) × 1.1 0110 0110 0110 … × 2
et exposant=‑1+127= et
s = 0 (01111110)2 m = 1 0110 0110 0110
0 2=(10)2
b = (−1) × 1.00001 × 2
m= (1.1)2 = 1.5
m= (1.11)2 = 1, 75
c=0 01111011 100 1100 1100 1100 1100 1100 s=0 c'est un nombre positif
e= (01111011)2 − 127 = −4
m= (1.10011001100110011001100)2 = 1, 5999999046
Remarque꞉ Le nombre 0.1 est approché par 0.099999994 en représentation binaire simple précision.
TD12 ꞉ Observer
calcul numérique.la différence entre le calcul algébrique et le
1) Déterminer le nombre de valeurs normalisées qui peuvent être représentées par un système de
représentation flottant avec base , mantisse places, exposant avec
β m . e L ≤ e ≤ M
m−1 m
card(F) = 2 × card([β ,β − 1]) × card([L, U ]) (1)
m m−1
= 2 × (β − β ) × (U − L + 1) (2)
m m−1
= 2 × (β − β ) × (U − L + 1) (4)
3 2
= 2 × (10 − 10 ) × (16 − (−15) + 1) (5)
= 2 × 900 × 32 (6)
= 57600 (7)
F=floating_numbers(beta,t,L,U)
n = len(F)
print(n)
Y = np.zeros(n)
figure(figsize=(16, 6), dpi=80)
plt.plot(F,Y,"m꞉*",label ='Floating numbers')
40
[<matplotlib.lines.Line2D at 0x7f9ad3514220>]
Out[1]:
l’exercice précédent pour le stockage de ces nombres, calculer les deux sommes et (x + y) + z
x + (y + z) .
x + y = 0.400 × 10
0
+ 0.400 × 10
0
est représenté par
= 0.800 × 10
0
. 0.800 × 10
0
y + z = 0.000400 × 10
3
+ 0.100 × 10
3
est représenté par
= 0.100400 × 10
3
. 0.100 × 10
3
6) Considérons une machine décimale avec mantisse à 4 chiffres. Calculer l’erreur de représentation et
l’erreur relative de représentation pour les nombres ꞉ , et
a = 9.023506 b = 158.26 . c = 0.00158894
arrondi(X)=tron( )X
∗
3
. − 1)
, , .
x = 1.2 y = 0 z = 0
1. Calculer numériquement les expressions ci‑dessus en utilisant le logiciel Matlab et les formats
short, long et rat pour afficher les résultats.
In [2]: import numpy as np
x=0.6+0.2+0.2+0.2
print(format(x,'.17f'))
y=np.sqrt(2)*np.sqrt(2)‑2
print(y)
z=1‑3*(4/3‑1)
print(z)
1.19999999999999996
4.440892098500626e‑16
2.220446049250313e‑16
1. En utilisant le logiciel Matlab, calculer le plus grand nombre entier naturel tel que le nombre
n e
n
709
8.218407461554972e+307
/var/folders/sz/pz2knvps6nn8p_1zvx21g3d80000gn/T/ipykernel_2144/897311188.py꞉3꞉ RuntimeW
arning꞉ overflow encountered in exp
while(np.isfinite(np.exp(n)))꞉ # on pourra remplacer cette ligne par while(exp(n)~=In
f)
TD14 ꞉
machineObserver, à travers un exemple, la non fiabilité du calcul
On considère la suite définie par
(un ) un = un−1 + avec
un−2
4
et
u0 = 1 avec
u1 = a . a ∈ R
a = (1 − √2)/2 , les premiers (l’entier est saisi par clavier) termes de la suite .
m m (un )
u0=1
u1 = (1‑np.sqrt(2))/2
Un = suite_rec(u0,u1,m)
plt.figure(figsize=(16, 6), dpi=80)
plt.plot(np.arange(0,m),Un,"m꞉*",label ='suite rec')
Donner m ꞉ 100
[<matplotlib.lines.Line2D at 0x7f9ad3c490a0>]
Out[5]:
1. Pour le cas où
a = (1 − √2)/2 , représenter graphiquement les premiers termes de la suite
m
Un = suite_rec(u0,u1,m)
Uex = np.zeros(m)
for n in range(m)꞉
Uex[n] = ((1‑np.sqrt(2))/2)**n
er = np.abs(Un‑Uex)
plt.figure(figsize=(16, 6), dpi=80)
plt.plot(np.arange(0,m),Uex,"m꞉",label ='suite rec')
Donner m ꞉ 100
[<matplotlib.lines.Line2D at 0x7f9ad43bc940>]
Out[6]:
1. Notons par la suite calculée par la formule de récurrence ci‑dessus. Afficher pour les
(un ) m
In [7]: er = np.abs(Un‑Uex)
print("Erreur=",er)
[<matplotlib.lines.Line2D at 0x7f9ad43e3a00>]
Out[8]:
qui entraine deux racines réelles distinctes et r1 = . Le terme général de la suite est
1−√2
r2 =
1+√2
entraine꞉
1 2
u0 = 1 λ1 + λ2 = 1
u1 = a entraine
λ1 r1 + (1 − λ1 )r2 = a
On obtient ainsi
λ1 =
r2 −a
√2
et λ2 = . a−r1
√2
pour a = −2 , on a λ1 = et
5+√2
2√ 2
λ2 =
−5+√2
2√ 2
pour a =
1−√2
2
= r1, on a λ1 = 1et λ2 = 0
Concernant la suite dont le second terme est ‑2, on obtient pour 3ème terme la valeur ‑2+1/4=‑7/4
négative et par la suite tous les termes suivants sont négatifs ( ) et la suite tend vers
un = un−1 +
un−2
n
|r2 | > 1 r → +∞ λ2 < 0 un → −∞
2
donne théoriquement une suite convergente vers 0 en oscillant autour de 0. Mais numériquement et à
1
cause d'une erreur numérique on obtient une valeur négative au lieu d'une valeur positive et encore une
fois et à cause de la relation un = un−1 + la suite diverge vers .
un−2
4
−∞