Introduction
Lorsqu'on parle de «types scalaires», on parle d'un type de données contenant uniquement qu'une seule donnée élémentaire. On ne retrouve pas à ce niveau de données complexes comme des structures par exemple. Les types scalaires sont définis en deux groupes : les types discrets et les types réels.
Les types discrets
Les types discrets se définit, comme, avec un ensemble de valeurs possibles et énumérables ainsi qu'avec nombre précis. Ainsi, il n'y a pas de nombre infini, mais uniquement des nombres finis. Dans ce type de données, on parle d'abord de nombres, mais le concept comprend également des valeurs de toute sorte. La plupart des langages contiennent donc les types discrets suivants :
- Les naturels (soit des nombres positifs uniquement dans un intervalle données)
- Les entiers (soit des nombres positifs ou négatif dans un intervalle données)
- Les types d'énumérations (comprenant par exemple les valeurs booléennes)
- Les caractères (soit un ou des caractères ASCII)
- Les énumérations (soit un ensemble de valeurs défini par l'utilisateur). Dans l'exemple suivant, on énumère des couleurs primaires, des jours de semaines et des grandes villes du Québec :
- Les intervalles (soit assez souvent basé sur des limites plus restrictives que des entiers, des caractères ou des énumérations). Dans l'exemple suivant, écrit en Pascal, on définit un intervalle de jour de semaine, un intervalle pour définir les caractères majuscules et un intervalle pour les nombres naturels :
Dans certains langages de programmation, comme le Pascal, les types discrets ne peuvent pas s'échanger des valeurs entre eux et nécessite une fonction de conversion comme «ORD» par exemple, tandis que des langages de programmation comme le C, eux, sont un peu trop permissif et tolèrent les mélanges de toutes sortes. La raison pour laquelle certains langages préfèrent obliger l'utilisateur à utiliser une fonction réside dans le fait que le programmeur doit indiquer consciemment qu'il demande de faire une exception sur une règle précise et qu'il ne s'agit pas d'une erreur de distraction. À l'inverse, un langage de programmation comme le C se base sur le fait que le programmeur est très vigilant à ce qu'il fait et qu'il ne fait donc jamais d'erreur !
Un des langages de programmation les plus poussés au niveau des types discrets, demeure le langage de programmation Pascal.
Les types réels
Les types réels, bien qu'aujourd'hui banal, dans la plupart des langages de programmation, cause énormément de problème. La raison de cette complexité tient du fait qu'un nombre réel est, par définition, dénombrable et potentiellement infini. Toutefois, l'ordinateur, dans ses mécanismes de base est tout le contraire, soit, sans aucune abstraction, précise, rigide et avec des exactitudes. On arrive dans avec un nouveau concept, lequel est l'approximation !
- Virgule flottante : L'une représentation d'un nombre réel, est la représentation selon le format de la virgule flottante, soit une composition d'un signe (S), d'un exposant (E) d'une mantisse. Dans cette représentation, on considère que la virgule de la décimale, est placée à gauche de la mantisse et que les bits de données de poids élevé du type de données sont à 1 sauf lorsque la valeur du type de données est à 0,0. Ainsi, la mantisse représente toujours un nombre situé dans l'intervalle de 0,5 à 1,0. Cet intervalle est appelé «valeur normalisée». Le nombre réel est donc une représentation de la formule de 2 x (M x 2E). Pour les valeurs négatives, il existe plusieurs techniques différentes de la représentée, mais en général il s'agit soit d'un bit réservé à signe ou d'intervalle réservé pour les nombres négatifs.
- Virgule fixe : Une autre représentation d'un nombre réel est la représentation en nombre à virgule fixe. Ce format se base sur le fait qu'on utilise un nombre entier représentant la partie fractionnaire d'un nombre et l'autre partie à la partie entière du nombre réel.
- BCD : Enfin, il existe également la représentation BCD, provenant de l'abréviation de l'anglicisme Binary Coded Decimal, laquelle se base sur une virgule fixe, mais la virgule est fournie séparément. Grâce à cette technique, il n'y a pas d'erreur d'arrondissement possible contrairement à la représentation de la virgule flottante ou de la virgule fixe. Le langage de programmation COBOL est le langage de programmation utilisant le plus ce type de données.
Ainsi, les types réels, ayant des contraintes machines, sont assez différentes des propriétés que l'on connait dans la science de la mathématique. En résumé, en informatique, (X / Y) x Y n'est pas forcément égal à X à cause de toute sorte de facteurs comme l'arrondissement par exemple.
Très peu de langages de programmation permettent de choisir différentes représentations de nombre réel, parmi les plus flexibles ont retrouve le langage de programmation Ada et Delphi.
Conclusion
Si l'on compare les types discrets et les types réels, dans le premier cas, ils sont facilement représentables au niveau matériel d'un microprocesseur et ne demandent aucun traitement spécifique pour être représentés, tandis que les nombres réels ne sont pas spécifiques à un microprocesseur ou à un langage de programmation, ils sont étroitement reliés au compilateur ou à l'interpréteur de langage de programmation. Il est donc impossible de convertir directement une valeur réelle en binaire d'une machine à l'autre, contrairement aux types discrets.