Nombres en informatique

Documents pareils
Représentation des Nombres

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Programmation C. Apprendre à développer des programmes simples dans le langage C

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Conversion d un entier. Méthode par soustraction

Chapitre 10 Arithmétique réelle

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

EXERCICES DE REVISIONS MATHEMATIQUES CM2

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Codage d information. Codage d information : -Définition-

Représentation d un nombre en machine, erreurs d arrondis

Programmation linéaire

Introduction à MATLAB R

Licence Sciences et Technologies Examen janvier 2010

Puissances d un nombre relatif

La mémoire. Un ordinateur. L'octet. Le bit

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN

IFT2880 Organisation des ordinateurs et systèmes

Algorithme. Table des matières

Informatique Générale

TP, première séquence d exercices.

V- Manipulations de nombres en binaire

Exprimer ce coefficient de proportionnalité sous forme de pourcentage : 3,5 %

Cours d algorithmique pour la classe de 2nde

Aide - mémoire gnuplot 4.0

Rappels sur les suites - Algorithme

Cours 7 : Utilisation de modules sous python

TS 35 Numériser. Activité introductive - Exercice et démarche expérimentale en fin d activité Notions et contenus du programme de Terminale S

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Le langage C. Séance n 4

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Bases de programmation. Cours 5. Structurer les données

Logiciel de Base. I. Représentation des nombres

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Introduction à l algorithmique et à la programmation (Info 2)

Technique opératoire de la division (1)

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

DM 1 : Montre Autoquartz ETA

Représentation d un entier en base b

Les opérations binaires

Petit lexique de calcul à l usage des élèves de sixième et de cinquième par M. PARCABE, professeur au collège Alain FOURNIER de BORDEAUX, mars 2007

Fonctions homographiques

INF 321 : mémento de la syntaxe de Java

EVALUATIONS MI-PARCOURS CM2

L informatique en BCPST

PG208, Projet n 3 : Serveur HTTP évolué


TP Codage numérique des caractères. Un ordinateur ne manipule que des 0 et des 1 : Comment alors code-t-il du texte?

UE C avancé cours 1: introduction et révisions

Ecran principal à l ouverture du logiciel

Notions fondamentales du langage C# Version 1.0

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Glossaire des nombres

Support de TD ArcGIS Introduction à l automatisation et au développement avec ArcGIS 10.1 JEAN-MARC GILLIOT e année ingénieur

Feuille TD n 1 Exercices d algorithmique éléments de correction

Les structures. Chapitre 3

TP3 Intégration de pratiques agiles. 1. User Stories (1) Scénario d intégration agile. En direct-live du château

ASR1 TD7 : Un microprocesseur RISC 16 bits

Cours d Informatique

TP 1 : 1 Calculs en binaire, octal et hexadécimal

1 Introduction - Qu est-ce que le logiciel R?

Correction TD algorithmique

1 Recherche en table par balayage

TP 1. Prise en main du langage Python

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

Algorithmique et programmation : les bases (VBA) Corrigé

TD : Codage des images

CORRIGE LES NOMBRES DECIMAUX RELATIFS. «Réfléchir avant d agir!»

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

LES TYPES DE DONNÉES DU LANGAGE PASCAL

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

Chapitre 1 I:\ Soyez courageux!

Cours Informatique 1. Monsieur SADOUNI Salheddine

I. Programmation I. 1 Ecrire un programme en Scilab traduisant l organigramme montré ci-après (on pourra utiliser les annexes):

Introduction à NetCDF

1 Démarrage de Marionnet

REALISATION D UNE CALCULATRICE GRACE AU LOGICIEL CROCODILE CLIPS 3.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

I- Définitions des signaux.

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Initiation. àl algorithmique et à la programmation. en C

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

Serveurs de noms Protocoles HTTP et FTP

Quantification Scalaire et Prédictive

Chapitre 4. Gestion de l environnement. Pré-requis. énoncé

Projet Matlab/Octave : segmentation d'un ballon de couleur dans une image couleur et insertion d'un logo

Groupes et utilisateurs locaux avec Windows XP

Les outils actuels permettent-ils d automatiser la production de cartes? De quels outils dispose-t-on?

NOTICE D' UTILISATION CAMWORKS FRAISAGE. Luc Vallée Lycée Blaise Pascal Segré

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Structure fonctionnelle d un SGBD

Texte Agrégation limitée par diffusion interne

UNE EXPERIENCE, EN COURS PREPARATOIRE, POUR FAIRE ORGANISER DE L INFORMATION EN TABLEAU

Le codage informatique

Date : Note /20 : EVALUATION Nom : Prénom : Classe : Traitement sur mots

Transcription:

Université Grenoble Alpes DLST UE MAP101 Année 2016-2017 Nombres en informatique Séance pratique (2 1h30) à faire par binôme. Dans cette séance, vous allez observer le codage des nombres en informatique, puis différents problèmes que peuvent engrer ce codage sur un ordinateur. Créez un répertoire nommé TP NOMBRES, démarrez Scilab et placez-vous dans ce répertoire. Récupérez par le WEB le fichier-script nombres.sce : allez à l adresse http://chamilo1.grenet.fr/ujf/courses/map101/ entrez vos login et mot de passe cliquez sur les liens Documents puis TP cliquez sur le fichier et enregistrez-le dans votre répertoire de travail Ce fichier contient des procédures de codages binaires à partir de valeurs, et inversement, ainsi qu une procédure d écriture exacte d une valeur. Placez ce fichier dans le répertoire TP NOMBRES. Une fois ce fichier récupéré, tapez dans la console Scilab la commande exec("nombres.sce", -1); Cette commande devra être ré-exécutée à chaque redémarrage de Scilab pour ce thème. Dans un premier temps, on va observer le codage de valeurs sur un ordinateur, puis voir le résultat exact de certaines opérations arithmétiques simples, et certains problèmes rencontrés lors du calcul des éléments d une suite numérique. 1 - Valeurs numériques avec Scilab Le logiciel Scilab code toutes les valeurs numériques en utilisant le codage réel flottant sur 64 bits. Dans la console, tapez les instructions suivantes : a=1, b=0.3, c=10^100, d = exp(-20), e = sqrt(2) Les valeurs sont affichées dans la console avec quelques chiffres après la virgule et éventuellement avec une puissance de 10 (1.00D+100 correspond à 1,00 10 100 ). Le nombre de chiffres après la virgule étant limité, la valeur affichée peut ne pas être une valeur exacte mais une valeur arrondie. Pour avoir plus de précision à l affichage d une valeur, il est préférable d utiliser l instruction mprintf avec un format flottant : mprintf("%n.pf",expression) où n est le nombre total de caractères pour l affichage, p le nombre de chiffres affiché après la virgule et expression une expression dont on veut afficher la valeur. Si dans le format, on ajoute les deux caractères \n, un retour à la ligne est fait. Tapez les instructions suivantes et observez le résultat : MAP101-2016-2017 1 Nombres en informatique

mprintf("%10.7f\n",e) mprintf("%15.12f\n",e) mprintf("%20.17f\n",e) on obtient l affichage de la valeur 2 avec différentes précisions. Tapez les instructions suivantes et observez le résultat : mprintf("%10.7f\n",b) mprintf("%15.12f\n",b) mprintf("%20.17f\n",b) mprintf("%60.57f\n",b) on remarque qu avec une précision suffisante à l affichage, on obtient la valeur exacte codée par Scilab pour b = 0,3. L instruction ecrire définie dans le script nombres.sce permet d écrire la valeur exacte sous forme scientifique en utilisant la précision nécessaire pour la mantisse. Tapez les instructions suivantes et observez le résultat : ecrire(b) ecrire(c) ceci montre que les valeurs b = 0,3 et c = 10 100 ne sont pas codées de manière exacte avec le logiciel Scilab. 2 - Codage de réels flottants, ordres de grandeur et précision Le codage des valeurs en utilisant le codage réel flottant sur 64 bits implique des limitations sur les valeurs qu on peut manipuler. Le script nombres.sce fournit des procédures pour obtenir le codage binaire à partir d une valeur réelle, et inversement. La procédure ecrire codage64 permet d écrire à l écran le codage binaire sur 64 bits d une valeur v. Testez cette procédure en tapant les instructions suivantes : ecrire_codage64(-101) ecrire_codage64(0.3) ecrire_codage64(0) Observez ce qui ce passe au niveau du codage quand on passe d une valeur v à v 2 et v/2, par exemple ecrire_codage64(1) ecrire_codage64(2) ecrire_codage64(0.5) ou bien ecrire_codage64(0.3) ecrire_codage64(0.6) ecrire_codage64(0.15) MAP101-2016-2017 2 Nombres en informatique

On peut aussi utiliser la procédure codage reel64 pour récupérer le codage d une valeur v sous forme de trois chaînes de caractères s (signe - 1 caractère), e (exposant - 11 caractères) et m (mantisse - 52 caractères). On peut aussi obtenir une valeur à partir d un codage donné sous la forme de 3 chaînes de caractères. Tapez les instructions suivant dans un fichier-script nommé ex1.sce e = "01111111111" m = "0000000000000000000000000000000000000000000000000000" (pour s assurer que m a bien 52 caractères, placez le curseur en début et fin de chaîne, et regardez les numéros de colonne correspondant dans la barre d état). Les ordres de grandeur qu on peut atteindre (en min. et en max.) pour une valeur réelle correspondant aux limites que les parties exposant (e) et mantisse (m) peuvent atteindre. Tapez les instructions suivantes dans un fichier-script nommé ex1.sce e = "00000000000" m = "0000000000000000000000000000000000000000000000000001" e = "00000000001" m = "0000000000000000000000000000000000000000000000000000" e = "11111111110" m = "1111111111111111111111111111111111111111111111111111" et exécutez ce fichier. La précision est donnée par le nombre de bits de la mantisse. Tapez les instructions suivantes dans un fichier-script nommé ex1.sce e = "01111111111" m = "0000000000000000000000000000000000000000000000000000" e = "01111111111" m = "0000000000000000000000000000000000000000000000000001" MAP101-2016-2017 3 Nombres en informatique

et exécutez ce fichier. Avec ce codage,la valeur immédiatement supérieure à1,et codée différemment de1est 1+2 52. La précision relative est de ε = 1/2 52 2.10 16 soit 15 à 16 chiffres décimaux après la virgule, c est à dire qu en deça de cette précision relative, deux nombres voisins non nuls x et y tels que x y x < ε seront codés sur ordinateur de la manière identique et donc considérés comme égaux. On dit parfois que ce codage des réels flottants sur 64 bits à une précision de 15 à 16 chiffres décimaux. Tapez l instruction ecrire codage64(4) puis ecrire codage64(4.1) puis ecrire codage64(4.01) puis ecrire codage64(4.001) etc... et arrêtez-vous dès que vous trouvez la valeur 4.000...001 = 4+10 m dont le codage est identique à la valeur 4. Que vaut m? 3 - Erreurs numériques lors de calcul sur ordinateur Le fait que certaines valeurs numériques (mêmes simples) ne peuvent pas être codées de manière exacte avec Scilab, peut entrainer des problèmes de calcul numérique. Exemple : On a 0,9 0,6 0,3 = 0 mais avec Scilab ce n est pas le cas. Tapez l instruction suivante et observez le résultat : r1=0.9-0.6-0.3 En effet les valeurs 0,3, 0,6 et 0,9 ne sont pas représentées de manière exacte en Scilab (tapez les instructions suivantes) ecrire(0.3) ecrire(0.6) ecrire(0.9) ecrire(0.9-0.6) on voit notamment que les valeurs 0,9 0,6 et 0,3 sont différentes avec Scilab, et qu un simple calcul peut engrer une (petite) erreur numérique. Si on effectue alors un grand nombre de calcul à la suite, ces différentes (petites erreurs) peuvent alors se cumuler. De plus l ordre dans lequel on fait les opérations peut influer sur le résultat. Tapez l instruction suivante et observez le résultat : r2=0.9-0.3-0.6 et comparez r2 avec r1. Exemple : On va effectuer le processus suivant : on part avec la valeur s = 0, puis on va lui ajouter la valeur 0,3 cent mille fois, puis lui retrancher la valeur 3 dix mille fois. Normalement on doit retrouver s = 0 car 0+0,3 100000 3 10000 = 0 Avec l éditeur de texte Scilab, créez le fichier suivant en le nommant ex numerique1.sce, exécutez-le et observez le résultat : s = 0; MAP101-2016-2017 4 Nombres en informatique

for k =1:10000 s = s+0.3; for k =1:1000 s = s-3; disp(s) la valeur de s n est pas nulle mais négative (proche de 0). Cet exemple simple montre le problème d accumulation des erreurs numériques. Exemple : Dans cet exemple, on va partir de la valeur b = 1 puis on va la diviser par 2 un certain nombre de fois. Comme la valeur de départ est non nulle et positive, en la divisant par deux, elle reste non nulle et positive b = 1 division par 2 b = 1/2 division par 2 b = 1/4 division par 2...... division par 2 b = 1/2 n division par 2 b = 1/2 n+1 division par 2... Avec l éditeur de texte Scilab, créez le fichier suivant en le nommant ex numerique2.sce b = 1; n = 0; // nombre d iterations while b>0 b = b/2; n = n+1; mprintf("la boucle s est arretee apres %d iterations", n) Normalement si on exécute ces instructions, on ne devrait jamais sortir de la boucle car la valeur de b devrait rester strictement supérieure à 0. Exécutez ce script, et commentez le résultat obtenu. Modifiez le script précédent en remplaçant l instruction while b>0 par while b+1>1 Le test b > 0 étant équivalent au test b+1 > 1, le script devrait avoir le même comportement. Exécutez ce script, et commentez le résultat. Exemple : Dans cet exemple, on va calculer une approximation du nombre π à l aide d une suite de nombres sensée converger vers π. La valeur π est le périmètre d un cercle de diamètre 1, et pour avoir une approximation de π, on peut considérer les périmètres de polygones réguliers inscrits dans un cercle de diamètre 1. Polygone P 1 Polygone P 2 Polygone P 3 Polygone P 4 (4 cotés) (8 cotés) (16 cotés) (32 cotés) MAP101-2016-2017 5 Nombres en informatique

On considère la suite de polygones réguliers à partir de P 1 (carré inscrit dans le cercle), et on passe de P n à P n+1 en doublant le nombre de cotés. On note v n le périmètre de P n. La suite de polygones P n t vers le cercle unité et donc la suite des valeurs de périmètre v n t vers la valeur π. On peut montrer que : v 1 = 2 2 et v n+1 = 2 n+1 2 4 ( vn 2 n Avec l éditeur de texte Scilab, créez le fichier suivant en le nommant ex suite pi.sce, exécutezle et observez le résultat : vn = 2*sqrt(2); for n=1:30 mprintf("n = %2d, v(%2d) = %20.15f\n", n, n, vn); vn = 2^(n+1)*sqrt(2-sqrt(4-(vn/2^n)^2)); Cette boucle calcule et écrit les 30 premiers termes de la suite v n. Les valeurs v n s approchent de π puis continuent ( à croîtrejusqu à 4 et deviennent ensuite nulles. vn L explication est la suivante : le terme va tre vers 0 donc numériquement va devenir 2 n négligeable par rapport à 4, et à partir d une certaine valeur de n 2 n+1 2 4 ( vn 2 n+1 2 4 0 = 0 2 n Pour éviter ce problème, il faut modifier la formule de récurrence entre v n et v n+1 : ( ( v n+1 = 2 2 n+1 vn 2 n+1 vn ) 2 ( vn 2 4 2+ 4 2 4 n 2 n = 2 n ( vn 2+ 4 2 n (1) Exercice 1 : Cet exercice fera l objet d un compte-ru (par binôme) noté. Simplifiez le numérateur de la formule (1) précédente, afin de trouver une nouvelle expression pour v n+1 en fonction de v n puis modifiez le script ex suite pi.sce en conséquence, et exécutez-le. Pourlecompte-ru,rreàlafindelaséanceunefeuilleA4manuscrite, enindiquant, les noms et prénoms de votre binôme avec la formule (1) simplifiée, la modification faite dans le script ex suite pi.sce, la valeur de v 30 obtenue. MAP101-2016-2017 6 Nombres en informatique