Suite

Existe-t-il un moyen de réduire rapidement la précision dans un certain nombre de champs DOUBLE ?

Existe-t-il un moyen de réduire rapidement la précision dans un certain nombre de champs DOUBLE ?


Je me demandais s'il existait un moyen de réduire la précision d'affichage d'un champ DOUBLE d'un certain nombre de champs, dans un fichier de formes. J'ai 25 champs et j'aimerais le faire le plus automatiquement possible mais je ne sais pas par où commencer. Je ne veux pas particulièrement créer de nouveaux champs et transférer les valeurs manuellement. J'affiche le texte à l'aide de texte dynamique sur des pages pilotées par les données. Je veux juste l'afficher avec deux plutôt que 5-6 décimales.

Voici à quoi ressemble la table attributaire, ainsi que la partie pertinente de la mise en page :

Voici la boîte de propriétés du champ :


Quelques façons d'accomplir ces types de tâches.
1. Round ([myfield], 2) Cela fonctionne pour la calculatrice de champ, l'étiquetage, etc.
2. dans la boîte de dialogue des calques, cliquez avec le bouton gauche sur la colonne des étiquettes et sélectionnez les étiquettes de format
3. sélectionnez le format de nombre dans les propriétés du champ et modifiez le nombre de décimales.



CORRECTION À LA MAUVAISE RÉPONSE :

Appuyez simplement sur l'onglet encerclé dans mon écran d'impression.


J'ai utilisé l'option arcpy.Calculatefield_managment dans ARCPY pour obtenir le même résultat

import arcpy arcpy.env.overwriteOutput = True Workspace = 'N:FGDB.gdb' Feature = 'Featureclass' In_Feature = Workspace + Feature Field_round = 'Length_KM' Round_operator = 'round(!Length_KM!,2)' print Round_operator arcpy.CalculateField_management(In_Feature, Field_round, Round_operator ,'PYTHON',")

L'agriculture de précision (AP), également appelée agriculture de précision ou agriculture intelligente, est un concept de gestion agricole relativement récent basé sur l'utilisation des technologies de l'information dans le but d'obtenir une efficacité de production plus élevée, une rentabilité durable et des produits de meilleure qualité, tout en minimisant les impacts environnementaux. . PA utilise une combinaison d'avancées technologiques, telles que les capteurs de culture et de sol, la technologie de navigation et de positionnement par satellite, la télédétection, les machines d'application à taux variable et l'Internet des objets, entre autres. D'autre part, afin de prendre des décisions de gestion des cultures spécifiques au site, l'AP utilise des méthodes pour traiter et analyser les données afin de connaître l'ampleur et les modèles spatio-temporels de la variabilité des cultures. Prendre la bonne décision au bon moment pour appliquer la bonne quantité d'intrants est un enjeu important car la productivité, les avantages économiques et la durabilité dépendent d'une bonne gestion de l'exploitation. L'AP a un grand potentiel et peut apporter une contribution significative à la production alimentaire, à la sécurité et à la sûreté mais, bien que les technologies d'AP soient déjà largement disponibles, leur niveau de mise en œuvre est encore faible. Néanmoins, des pratiques de travail influentes et de nouveaux modèles d'entreprise agricoles sont en augmentation en tant qu'application des concepts d'agriculture de précision.

Ce numéro spécial entend couvrir l'état de l'art et les progrès récents dans différents aspects liés à la mise en œuvre réelle de l'agriculture de précision dans un large éventail de systèmes de culture (cultures céréalières, prairies, cultures horticoles, arbres fruitiers). Tous les types de manuscrits (recherches originales et revues) fournissant de nouvelles informations sur l'application et les avantages des méthodes et de la technologie de l'agriculture de précision sont les bienvenus. Les articles peuvent inclure, sans s'y limiter, les sujets suivants :

  • Analyse spatiale et zonage de la variabilité intra-champ et à la ferme
  • Détection proximale et à distance des sols et des cultures
  • Échantillonnage et analyse géostatistique
  • Réseaux de capteurs sans fil, Internet des objets, big data en PA
  • Technologies à taux variable
  • Irrigation de précision
  • ingénierie agricole et robotique
  • Protection des cultures de précision
  • Détection et gestion de l'azote
  • Modèles de cultures et systèmes d'aide à la décision en AP
  • Mise en œuvre et efficacité réelles de l'AP (économique et/ou environnementale)

Prof. José Antonio Martínez-Casasnovas
Dr Jaume Arnó Satorra
Éditeurs invités

Informations sur la soumission du manuscrit

Les manuscrits doivent être soumis en ligne sur www.mdpi.com en s'inscrivant et en se connectant à ce site Web. Une fois inscrit, cliquez ici pour accéder au formulaire de soumission. Les manuscrits peuvent être soumis jusqu'à la date limite. Tous les articles seront évalués par des pairs. Les articles acceptés seront publiés en continu dans la revue (dès leur acceptation) et seront répertoriés ensemble sur le site Web du numéro spécial. Des articles de recherche, des articles de synthèse ainsi que de courtes communications sont invités. Pour les articles prévus, un titre et un court résumé (environ 100 mots) peuvent être envoyés au bureau éditorial pour annonce sur ce site.

Les manuscrits soumis ne doivent pas avoir été publiés auparavant, ni être à l'étude pour publication ailleurs (à l'exception des actes de conférence). Tous les manuscrits sont soumis à un examen approfondi par le biais d'un processus d'examen par les pairs en simple aveugle. Un guide pour les auteurs et d'autres informations pertinentes pour la soumission de manuscrits sont disponibles sur la page Instructions pour les auteurs. Agriculture est une revue mensuelle internationale à comité de lecture en libre accès publiée par MDPI.

Veuillez visiter la page Instructions pour les auteurs avant de soumettre un manuscrit. Les frais de traitement des articles (APC) pour la publication dans cette revue en libre accès sont de 1600 CHF (francs suisses). Les articles soumis doivent être bien formatés et utiliser un bon anglais. Les auteurs peuvent utiliser le service d'édition en anglais de MDPI avant la publication ou pendant les révisions d'auteur.


7 réponses 7

Pourquoi DateTime.Now serait-il rendu moins précis que ce que la plupart des horloges CPU pourraient gérer ?

Une bonne horloge doit être à la fois précis et exact ceux-là sont différents. Comme le dit la vieille blague, une horloge arrêtée est exacte deux fois par jour, une horloge lente d'une minute n'est précise à aucun moment. Mais l'horloge lente d'une minute est toujours précise à la minute près, alors qu'une horloge arrêtée n'a aucune précision utile.

Pourquoi le DateTime devrait-il être précis à, disons une microseconde quand il ne peut pas être exact à la microseconde ? La plupart des gens n'ont aucune source de signaux horaires officiels précis à la microseconde. Donc donner six chiffres après la virgule de précision, dont les cinq derniers sont des ordures serait couché.

N'oubliez pas que le but de DateTime est de représenter une date et une heure. Les timings de haute précision ne sont pas du tout le but de DateTime comme vous le remarquez, c'est le but de StopWatch. Le but de DateTime est de représenter une date et une heure à des fins telles que l'affichage de l'heure actuelle à l'utilisateur, le calcul du nombre de jours jusqu'à mardi prochain, etc.

Bref, "quelle heure est-il ?" et "combien de temps cela a-t-il pris ?" sont des questions complètement différentes n'utilisez pas un outil conçu pour répondre à une question pour répondre à l'autre.


11 façons de réduire la consommation d'énergie de l'IA

Pousser l'IA à la périphérie nécessite de nouvelles architectures, de nouveaux outils et de nouvelles approches.

Au fur et à mesure que l'industrie de l'apprentissage automatique évolue, l'accent est passé de la simple résolution du problème à une meilleure résolution du problème.

« Mieux » a souvent signifié précision ou vitesse, mais à mesure que les budgets énergétiques des centres de données explosent et que l'apprentissage automatique se déplace vers la périphérie, la consommation d'énergie a pris sa place aux côtés de la précision et de la vitesse en tant que problème critique. Il existe un certain nombre d'approches des réseaux de neurones qui permettent de réduire la consommation d'énergie.

"Tout le monde recherche d'autres moyens de mettre en œuvre des réseaux de neurones qui seront beaucoup moins puissants", a déclaré Elias Fallon, directeur du groupe d'ingénierie logicielle, groupe IC & PCB personnalisé chez Cadence.

D'autres sont d'accord. "Google lui-même s'inquiète de la puissance lors de la création et de la formation du réseau neuronal", a déclaré Venki Venkatesh, directeur des solutions R&D, AI & ML, groupe de conception numérique chez Synopsys.

Chaque décision prise au sujet d'un réseau de neurones a des implications pour l'énergie. Le modèle lui-même affecte la puissance, tout comme le choix du matériel de mise en œuvre. Alors que les performances et la puissance se sont historiquement opposées, de nombreux choix à faible consommation d'énergie peuvent également augmenter la vitesse. C'est la précision qui peut être plus susceptible de souffrir avec des implémentations à faible consommation d'énergie.

Nous parlons souvent de « consommation d'énergie » comme si l'énergie était quelque chose qui pouvait être consommée. Mais la puissance est le taux de consommation d'énergie. « La puissance est très importante pour un fournisseur de silicium qui fabrique ces choses. Ils doivent concevoir correctement les rails d'alimentation et les tensions », a déclaré Suhas Mitra, directeur du marketing produit pour les produits Tensilica AI chez Cadence. « Mais le plus important pour la sélection IP est une énergie plus faible. »

En d'autres termes, si la limitation est la chaleur, alors la puissance est la plus importante. Si la limitation est la durée de vie de la batterie, alors c'est la consommation d'énergie, pas la puissance, qui compte.

« La saturation d'énergie se transforme en saturation de puissance, car vous ne pouvez pas refroidir les puces une fois qu'elles dépassent quelques centaines de watts », a déclaré Nick Harris, PDG de Lightmatter. "Et puis cela se transforme en" Je ne peux pas utiliser les transistors pour faire du travail de calcul. ""

Moins de calcul et moins de données signifient moins d'énergie consommée. Cela conduit à un certain nombre d'approches architecturales et de tactiques spécifiques qui réduisent la consommation d'énergie. De plus, moins de mouvements de données signifie une consommation d'énergie moindre. Ces idées peuvent fonctionner indépendamment ou être empilées pour de plus grandes économies.

1. Des modèles plus petits. Toutes choses étant égales par ailleurs, un modèle plus petit aura moins de couches avec moins de filtres, et nécessitera donc moins de calcul et moins de mémoire.

"Nous avons vu une différence d'ordre de grandeur dans le calcul entre les graphiques qui fonctionnent sur les mêmes ensembles de données", a déclaré Fergus Casey, directeur R&D pour les processeurs ARC chez Synopsys. « Parfois, les graphiques optimisés pour des besoins de calcul inférieurs ne dégradent même pas la précision des résultats. »

Malheureusement, choisir simplement un réseau plus petit pour s'entraîner peut ne pas être une bonne solution ici. Dans un domaine où le rasoir d'Occam pourrait être appliqué à bon escient, la tendance actuelle vers des modèles plus grands souligne le défi. Si les petits modèles suffisaient toujours, il n'y aurait pas besoin de grands. Et pourtant, ils ne cessent de grossir.

Cela est motivé par le besoin d'une plus grande précision et d'une prise de décision plus sophistiquée. Faire un meilleur travail sur une plus grande variété d'échantillons de formation peut nécessiter des modèles plus grands. Manipuler plus de nuances dans un champ d'échantillons (distinguer ce chien ressemblant à un chat d'un chat ressemblant à un chien) peut également nécessiter plus de poids.

Comme nous le verrons, il existe des idées qui rendent un modèle plus petit sur une base tactique, mais si MobileNet était suffisant pour tout, nous n'aurions pas besoin de YOLO. Au lieu de cela, les modèles plus petits sont choisis lorsque la plate-forme informatique et la source d'énergie l'exigent, avec la précision comme compromis potentiel.

2. Déplacer moins de données. C'est probablement la plus visible des atténuations énergétiques, étant donné la reconnaissance répandue des effets de frapper le mur de la mémoire. Les solutions ici sont de nature hautement architecturale.

Alors que l'approche antérieure suggérait de réduire les données, le mur de mémoire consiste moins à réduire les données qu'à les déplacer moins et sur des distances plus courtes. Pour une quantité de données donnée, l'architecture peut être un facteur déterminant.

Le pire des cas serait un seul processeur traitant un réseau entier. Pour chaque calcul, les données doivent être récupérées, exploitées et stockées à nouveau pour une utilisation ultérieure. Les instructions doivent également être récupérées et décodées pour un ensemble donné d'opérandes. Les frais généraux dominent, nuisant à la fois à la puissance et aux performances.

À l'autre extrémité du spectre se trouvent les architectures où les poids restent résidents et les activations progressent progressivement dans une puce. En rendant la puce suffisamment grande pour contenir un modèle entier, les poids peuvent être chargés une fois et laissés en place. En localisant de petits morceaux de SRAM à la sortie de chaque étage de filtre, les activations peuvent s'écouler vers les cellules voisines pour un calcul ultérieur, plutôt que d'avoir à retourner entièrement dans la DRAM et à ressortir plus tard.

Garder les poids stationnaires n'est cependant qu'une option. « Le poids stationnaire peut être plus efficace pour les convolutions traditionnelles, mais les couches entièrement connectées non traitées par lots seront plus efficaces en mode stationnaire d'entrée ou stationnaire de sortie », a déclaré Casey. Ce dernier fait référence à la génération d'un seul résultat presque final plutôt qu'au stockage et à la combinaison ultérieure d'une série de résultats partiels.

Il s'agit d'un domaine où la distinction entre la puissance et l'énergie consommée peut être très différente. En théorie, si le calcul est entièrement canalisé par un seul cœur qui consomme x énergie, alors l'énergie consommée pour y calculs sera x fois y.

Si un tableau du même cœur a été construit avec suffisamment de cœurs pour gérer tous les calculs en parallèle, alors vous avez y cœurs effectuant 1 calcul au lieu de 1 cœur effectuant y calculs. L'énergie consommée devrait être la même, mais le fait que la version parallèle consomme l'énergie dans une période de temps beaucoup plus courte lui donne une puissance beaucoup plus élevée.

Une autre façon d'améliorer la localité est de faire autant de calculs aussi près que possible de la source de données. Andy Heinig, chef de groupe pour l'intégration de systèmes avancés et chef du département de l'électronique efficace chez Fraunhofer IIS’ Engineering of Adaptive Systems Division, l'a illustré avec un exemple de fusion de capteurs. « Pour différentes tâches, il est très important de répartir le traitement des données entre différents endroits », a-t-il déclaré. « La première étape de traitement doit avoir lieu directement sur le capteur et le traitement ultérieur sur un nœud périphérique, qui résume les informations provenant de différents capteurs. »

Dans une application comme une automobile, les capteurs sont largement distribués, il peut donc être nécessaire d'avoir un lieu de calcul central pour replier tous les capteurs. tous les capteurs disponibles », a ajouté Heinig. Minimiser ce calcul central signifie que moins de données sont alimentées depuis les extrémités du véhicule.

En général, un compilateur efficace peut optimiser le mouvement des données grâce à une utilisation prudente des caches, des FIFO et/ou des opérations DMA.

Toutes choses égales par ailleurs, ce choix architectural ne devrait pas impacter la précision.

3. Moins de calcul — si possible. Pour un modèle donné, il peut exister des moyens de calculer un résultat avec moins d'opérations. Un exemple populaire de convolution est l'approche de Winograd.

« L'utilisation d'une transformation Winograd des convolutions peut réduire considérablement le nombre de calculs nécessaires pour une grande opération de tenseur, ce qui réduit considérablement la puissance du processus », a déclaré Steve Roddy, vice-président du marketing produit, groupe d'apprentissage automatique chez Arm.

L'échelle d'une approche directe des multiplications matricielles convolutives est de l'ordre de n 3 , tandis que Winograd la réduit à n 2 . En particulier, elle réduit le nombre de calculs « forts » (multiplications) au détriment de calculs « faibles » supplémentaires (additions).

Le choix de la fonction d'activation peut également avoir son importance. "Un petit modèle qui repose sur tanh comme fonction d'activation peut être moins efficace qu'un modèle légèrement plus grand utilisant un simple ReLU", a noté Casey.

Le choix du modèle d'exécution peut également avoir son importance. L'utilisation d'une approche interprétée comme TensorFlow Lite ou un autre équivalent peut consommer plus d'énergie qu'un modèle qui a été compilé directement pour le matériel sous-jacent.

4. Le traitement par lots est utile, dans la mesure du possible. Pour certaines applications, comme le traitement d'une collection d'images ou de cadres statiques, une plus grande efficacité peut être obtenue en augmentant la taille du lot. Cela signifie qu'une configuration donnée des ressources de traitement (code du noyau et poids) peut être amortie sur plus d'échantillons, ce qui entraîne moins de récupérations de données et d'instructions.

Mais cela ne fonctionne que pour certaines applications. Et cela ne s'applique généralement qu'aux implémentations de centre de données, où une opération est effectuée sur une grande collection d'échantillons déjà résidents.

Les applications Edge reçoivent normalement un seul paquet de données à la fois. Par définition, ils doivent terminer le traitement d'un seul paquet avant de pouvoir commencer le suivant. Cette technique ne s'applique donc pas bien à certaines des implémentations qui pourraient l'utiliser le plus - les petits périphériques de périphérie alimentés par batterie.

Le traitement par lots n'affecte pas non plus la précision. Les résultats obtenus simultanément à partir d'un grand lot de données ne devraient pas être différents du même traitement effectué un échantillon complet à la fois.

5. Les formats de données sont importants. La plus grande précision sera obtenue en utilisant les nombres les plus précis dans les calculs. C'est pourquoi la formation implique généralement des nombres à virgule flottante.

Mais les circuits à virgule flottante utilisent plus d'énergie que les circuits entiers. Et les entiers exprimés avec plus de bits utilisent plus d'énergie que les entiers avec des largeurs de bits plus petites.

La quantification en nombre entier est courante, mais pas universelle. Là où c'est fait, de nombreuses entreprises semblent s'installer sur des entiers de 8 bits. Mais les chercheurs étudient également des nombres entiers plus petits - 4 bits, 2 bits et même 1 bit. Cela signifie moins de stockage et de déplacement de données.

La limite est la mise en œuvre à un seul bit, qui donne naissance à des « réseaux de neurones binaires » ou BNN. « Non seulement cela réduit la quantité de calcul et la quantité de mémoire, mais vous pouvez en fait vous débarrasser complètement du circuit de multiplication », a déclaré Linley Gwennap, président et analyste principal du Linley Group, lors de la conférence Linley Spring 2021. « Quand vous n'avez qu'un bit multiplié par un bit, c'est une porte logique XNOR qui exécute la fonction. Il s'agit donc d'une grande économie de calcul et d'alimentation.

Le compromis ici est la précision. « Au fur et à mesure que vous faites ces compromis, vous passez d'une version à virgule flottante à une version quantifiée et à une précision de bits inférieure », a déclaré Mitra. « Ce qui est fantastique, c'est que toutes ces choses sont possibles. La partie que les gens oublient, c'est que rien n'est gratuit.

Les modèles peuvent nécessiter un recyclage après la quantification afin de rétablir la précision. L'apprentissage prenant en compte la quantification peut aider en incorporant la largeur de bits souhaitée dans l'apprentissage d'origine, ce qui évite potentiellement le besoin d'une étape de recyclage en aval.

La précision peut également être ajustée en permettant à différentes couches d'avoir des précisions différentes. Les cadres de formation prennent en charge cela, en équilibrant le besoin d'une faible énergie et d'une plus grande précision.

Certaines entreprises ont consacré beaucoup d'efforts à trouver des moyens de réduire la taille des données sans nuire à la précision. "IBM est capable d'atteindre la même précision, de INT8 à INT4, ce qui est assez impressionnant", a déclaré Gwennap. "Même si vous utilisez des nombres entiers de 2 bits, la précision est d'un ou deux pour cent."

Il existe un effet secondaire possible de la réduction de la taille des données si la précision doit être maintenue. "Souvent, la taille des réseaux augmente avec des types de données plus petits", a déclaré Heinig. « Il y a définitivement un sweet spot. Mais le sweet spot peut être spécifique à l'application.

6. La parcimonie peut aider. Les calculs de réseaux neuronaux concernent tous les mathématiques vectorielles et matricielles.En théorie, la quantité de calcul n'est déterminée que par la taille des matrices. Mais les entrées de valeur 0 créent un résultat de multiplication nul qui est connu a priori. Il n'est pas nécessaire d'exécuter le calcul. Ainsi, plus il y a d'entrées vectorielles ou matricielles à 0, moins le calcul est vrai.

En principe, il est possible qu'un modèle brut soit naturellement plus clairsemé qu'un autre modèle. Dans ce cas, il n'y a aucun compromis à faire pour profiter de cette rareté. Mais généralement, plutôt que des matrices ou des vecteurs vraiment clairsemés, ils peuvent avoir des entrées qui sont de très petits nombres. L'idée est que ces entrées ont un impact négligeable sur le résultat global, et donc les petits nombres peuvent être changés en 0 pour créer plus de parcimonie.

Cela peut être fait pendant le développement du modèle en éliminant les poids qui sont trop petits, ce qui entraîne des matrices de poids plus clairsemées. Il peut également s'agir d'activations en temps réel, selon les fonctions d'activation choisies, conduisant à des vecteurs d'activation plus clairsemés.

Nvidia a une version dynamique de cela impliquant le masquage des poids de valeur zéro. Cela ajoute de la complexité au circuit tout en tirant davantage parti de la parcimonie que d'autres approches.

Fig. 1 : Le schéma de Nvidia peut tirer parti de la parcimonie dans différentes positions en regroupant les valeurs non nulles et en utilisant un masque pour s'assurer que les valeurs sont multipliées par les valeurs d'activation appropriées. Source : Le groupe Linley

Le compromis est encore une fois la précision. Lorsqu'un poids donné, par exemple, est élagué, l'hypothèse est que cela n'allait pas vraiment faire une différence significative dans le résultat. Et cela pourrait être vrai - pour ce seul poids. Mais si un grand nombre de poids sont élagués, le résultat cumulé peut être moins précis.

De même, une activation donnée peut ne pas être beaucoup affectée par l'introduction de la parcimonie. Mais si cela se produit à chaque couche, des erreurs peuvent s'accumuler, ce qui nuit à la précision.

7. Utilisez la compression. Pour un niveau de parcimonie donné, la compression peut aider à réduire la quantité de données déplacées. Au moment de la conception, les poids peuvent être compressés au détriment du matériel de décompression. Au moment de l'exécution, les entrées ou les activations peuvent être compressées au détriment du matériel de compression et de décompression.

« Le coût énergétique de la décompression est bien inférieur à ce que vous dépenseriez pour récupérer les bits supplémentaires », a noté Ashutosh Pandey, membre senior du personnel technique, ingénieur système chez Infineon.

Cette compression, en supposant qu'elle soit sans perte, ne devrait avoir aucun impact sur la précision.

8. Se concentrer sur les événements. La vidéo consiste en une série d'images en séquence. Chaque image sera différente de la précédente – parfois considérablement, mais le plus souvent subtilement. Un seul objet peut se déplacer dans le cadre, par exemple, tandis que l'arrière-plan reste immobile.

Les approches traditionnelles retraitent ces informations stationnaires à chaque image. Au fil du temps, cela représente beaucoup de traitements redondants. Une alternative consiste à concentrer le calcul uniquement sur ce qui change dans le flux. C'est généralement beaucoup moins de pixels que le plein cadre, ce qui permet moins de calcul et moins de mémoire.

Cela peut être fait en utilisant une architecture de réseau de neurones standard, mais en se concentrant uniquement sur le changement. Pour la première trame, la trame entière doit être traitée. Pour les images successives, un « diff » peut être pris entre les images actuelles et précédentes, en dirigeant le travail uniquement vers les parties qui ont changé.

Ces changements sont classés comme des « événements » et ce type d'architecture est une approche « basée sur les événements ». GrAI Matter est un exemple d'entreprise qui a un réseau plus ou moins conventionnel, mais qui travaille dans le domaine de l'événementiel.

Une autre mise en œuvre de cette idée est un réseau de neurones à pics, ou SNN. Les SNN sont considérés comme neuromorphes et n'ont pas la même structure que les réseaux de neurones artificiels (ANN) plus conventionnels. Le projet Loihi d'Intel est une tentative massive de regroupement des SNN. BrainChip a une offre commerciale plus modeste.

Fig. 2 : Les réseaux de neurones à pointes imitent le cerveau, réduisant la puissance en se concentrant sur les événements. Source : Le groupe Linley

Il n'est pas clair que l'utilisation d'une approche basée sur les événements aurait un impact spécifique sur la précision.

Casey a noté un défi avec les architectures basées sur les événements : en raison d'un manque de synchronisation, « un SNN entièrement axé sur les événements ne pourra exploiter aucune vectorisation ». Cela peut entraîner des calculs moins efficaces, ce qui pourrait restituer une partie de l'énergie économisée.

9. Utilisation de circuits analogiques. Les implémentations analogiques peuvent consommer moins d'énergie que les versions numériques, en particulier lorsque le calcul est effectué sur un signal analogique. La conversion de l'analogique au numérique peut consommer beaucoup d'énergie, donc rester dans le domaine analogique, si possible, permet d'économiser cette énergie. "Vous pouvez réduire la puissance de 10X, 20X ou plus en utilisant l'informatique analogique", a noté Gwennap.

Cela peut être particulièrement efficace si le flux de capteur entrant a un faible niveau de données pertinentes. L'énergie est économisée en ne convertissant pas les données non pertinentes en numérique pour analyse. Aspinity est un exemple d'entreprise qui suit cette voie.

L'informatique en mémoire (IMC) exploite également l'analogique, mais il comporte des îlots analogiques dans une puce autrement numérique. Les données numériques doivent être converties avec précision en analogique pour le calcul, puis le résultat doit être reconverti avec précision en numérique, ce qui réduit les économies d'énergie globales. Mais l'affirmation est que les économies d'énergie dans le domaine analogique en font toujours une victoire énergétique nette. Mythic est un exemple d'entreprise utilisant cette technique.

IMC peut réduire la puissance de deux manières. "Le fait de ne pas avoir besoin de récupérer les données de la mémoire est un facteur écrasant", a déclaré Ramesh Chettuvetty, directeur principal de l'ingénierie des applications et du marketing produit, solutions de mémoire, pour la gamme de produits RAM d'Infineon. "Mais l'autre chose est qu'IMC améliore considérablement le parallélisme de calcul."

Fig. 3 : L'informatique en mémoire transforme les opérations de multiplication-addition en un exercice de loi d'Ohm via une matrice mémoire. Les poids restent résidents en tant que valeurs de conductance dans le réseau. Source : Le groupe Linley

Il y a vraiment un obstacle principal à l'utilisation de l'analogique dans plus d'endroits, comme l'a noté Heinig : « les techniques analogiques sont beaucoup plus complexes à mettre en œuvre. »

10. Utiliser des photons au lieu d'électrons. Alors que les développeurs traditionnels se battent avec la loi de Moore pour augmenter l'informatique électronique qui peut être effectuée sur un morceau de silicium, très peu d'entreprises se tournent vers la photonique sur silicium. Cela peut réduire la consommation d'énergie car l'informatique elle-même ne consomme aucune énergie.

Toute l'énergie utilisée pour le calcul photonique provient du laser. Cette énergie sera divisée et recombinée de différentes manières au cours de la phase de calcul, et une partie de l'énergie sera perdue dans les guides d'ondes. Mais fondamentalement, le laser est le seul consommateur d'énergie externe. Tout le reste des circuits ne fait que dissiper cette énergie, en laissant, espérons-le, suffisamment dans le signal de sortie pour être utile.

Cela met l'accent sur la création d'une plate-forme photonique efficace avec des guides d'ondes à faible perte. Mais il y a une limite à l'exotisme de la plate-forme, car les puces photoniques pratiques d'aujourd'hui devront être compatibles avec CMOS afin que des efficacités fabuleuses puissent être exploitées pour des coûts inférieurs (que les circuits CMOS coexistent ou non avec la photonique sur une seule puce ).

Fig. 4 : Les « circuits » photoniques n'utilisent pas d'énergie pour les fonctions de calcul. Toute l'énergie est introduite par les lasers. Source : Le groupe Linley

11. Optimisez votre matériel et vos logiciels. Adapter une implémentation aux capacités du matériel informatique sous-jacent réduira également la puissance. Cela peut signifier l'architecture de niveau supérieur ou les détails de niveau inférieur. « Si vous pouvez adapter votre pipeline à votre application, c'est une façon d'économiser de l'énergie », a déclaré Pandey.

Plus tôt cela est fait, mieux c'est. « Peut-être que l'effet le plus important vient de l'adaptation du réseau au matériel cible, et ce au moment du développement du modèle », a déclaré Roddy. « Il existe aujourd'hui une multitude de techniques disponibles dans les cadres de formation qui mettent l'accent sur le déploiement de l'inférence sur les appareils. »

Dans certains cas, vous pouvez d'abord entraîner le modèle, en utilisant une ébauche juste pour que quelque chose fonctionne le plus rapidement possible. Une fois le matériel choisi, le recyclage pour ce matériel ou la compilation spécifique pour ce matériel se traduira par une mise en œuvre plus efficace.

Bien que l'accent soit mis sur les architectures matérielles, il y a presque toujours des composants logiciels en cours d'exécution. La façon dont cela est optimisé - la façon dont les boucles sont imbriquées, par exemple - peut affecter la consommation d'énergie.

Conclusion
Avec les circuits traditionnels, il est généralement entendu que, pour accélérer les choses, vous devez utiliser plus d'énergie. La vitesse et la puissance sont des combattants sans fin dans ce jeu. Mais dans le cas de la réduction de la consommation d'énergie de l'IA, de nombreuses techniques contribuent également à des performances plus élevées.

Par exemple, en gardant les données locales ou stationnaires, vous économisez de l'énergie sans subir les additionneurs de latence des récupérations de données. La parcimonie réduit la quantité de calcul, ce qui signifie que vous terminez plus rapidement.

L'exemple ultime est la photonique. Les calculs seront possibles avec une latence de niveau picoseconde et des niveaux élevés de parallélisme peuvent être mis en œuvre à l'aide du multiplexage par division d'onde, complétant ainsi plusieurs flux de calcul en parallèle dans cette période de temps de niveau picoseconde.

Ce n'est pas un déjeuner gratuit, cependant. Là où la puissance et les performances ne se disputent pas, les compromis sont probablement le coût et/ou la précision. On pourrait bien échanger la zone de silicium pour les avantages de puissance et de vitesse. Cela dit, l'argent dépensé pour le silicium peut s'amortir avec des factures d'énergie moins élevées.


Expériences de Suède

Le développement technologique de l'AP a été rapide depuis les années 90, tandis qu'une mise en œuvre à grande échelle et une utilisation pratique de la technologie ont été beaucoup plus lentes. De nombreux agriculteurs achètent de nouvelles machines avec des fonctions intégrées pour les mesures variables et la technologie PA, sans les utiliser réellement. Ceci peut être illustré par la citation suivante d'un agriculteur impliqué dans un projet en cours lié à la PLV : « C'est la situation aujourd'hui… vous avez beaucoup de technologie, mais vous ne l'utilisez pas… l'intérêt ou les connaissances… il y a souvent beaucoup de technologie dans une machine dont vous n'avez pas besoin… et beaucoup de gens ne l'utilisent pas… loin de là ». À la fin des années 90, le capteur Yara N a été introduit sur le marché suédois. Au départ, peu d'agriculteurs, certains travaillant en sous-traitance, ont adopté la technologie des capteurs N tandis que la majorité des agriculteurs, conseillers ainsi que les autorités sont restées plutôt passives, malgré une promotion continue de la technologie dans la presse agricole, les expositions et par les fabricants. Il bénéficiait du soutien des fabricants et des distributeurs, mais il y avait peu d'expériences sur le terrain pour garantir la fiabilité des avantages de la technologie des capteurs N dès le départ. Pourtant, le capteur Yara N est un appareil difficile à évaluer pleinement sur des champs individuels sans expériences sur le terrain. Néanmoins, en 2015, la plupart des agriculteurs suédois ont entendu parler du capteur Yara N et au cours de la saison 2015, il a été estimé qu'environ 130 capteurs Yara N sont utilisés dans les exploitations suédoises. Les conditions de croissance ont été très favorables aux céréales en 2015 avec un potentiel de rendement élevé et une forte demande en azote pour garantir la qualité boulangère (c'est-à-dire la teneur en protéines). De nombreux agriculteurs et conseillers n'ont remarqué cette augmentation de la demande d'azote qu'après la récolte ! Cependant, les champs fertilisés avec du VRA basé sur un capteur d'azote ont montré une teneur en N plus élevée à la fois dans le blé pour la mouture et l'orge de brasserie (com. pers. K Nissen Yara AB Suède). La minoterie suédoise dominante prétend que le VRA d'engrais est une nécessité pour la production de blé avec la bonne qualité pour la farine (http://www.kungsornen.se/).

Le capteur Yara N détecte l'état de l'azote et de la biomasse des plantes en mesurant la réflectance de la canopée dans certaines parties du spectre électromagnétique rouge et proche infrarouge (Link et al. 2002). Les informations spectrales obtenues sont combinées à un algorithme de fertilisation qui permet une fertilisation azotée spécifique au site dans un champ. Lammel et al. (2001) soulignent que le capteur Yara N est utile pour éviter la sur- et sous-fertilisation dans un champ, ce qui entraîne une augmentation du rendement, une diminution de la verse et une maturation plus homogène. D'autres chercheurs soulignent que l'utilisation du capteur N n'a entraîné que de petites différences de rendement (Berntsen et Thomsen et al. 2006 Jørgensen et al. 2006) et Zillmann et al. (2006) soulignent que la technologie du capteur N fonctionne lorsque l'azote est le principal facteur limitant la croissance. L'utilisation du capteur Yara N réduit la lixiviation d'azote si les zones ayant des besoins inférieurs en fertilisation azotée dans le champ peuvent être identifiées (Delin et Stenberg 2014). Ainsi, la technologie du capteur N pourrait avoir des avantages pour les agriculteurs ainsi que pour une société plus durable à long terme. Il a été reconnu par les parties prenantes de la communauté agricole suédoise que les producteurs où la qualité et le paiement des récoltes sont fortement liés à la teneur en azote, tels que l'orge brassicole et le blé panifiable, ou lorsque la capacité de minéralisation du sol varie considérablement, par exemple en raison d'un apport ou d'une variation élevé de fumier. dans le type de sol, présentent l'avantage potentiel le plus important de la technologie du capteur N.

D'une manière générale, la plupart des agriculteurs se rendent compte que le rendement varie au sein d'un champ ainsi que l'amplitude de la variation peut varier beaucoup entre les différents champs. En théorie, les agriculteurs ne devraient avoir aucun problème à saisir l'utilité du capteur Yara N. Néanmoins, de nombreux agriculteurs n'utilisent pas d'application variable d'azote. Les raisons peuvent être des coûts plus élevés, du travail supplémentaire, des doutes sur la crédibilité ou le rapport coût-bénéfice. En fait, même pas dans les cultures spéciales, par exemple dans la pomme de terre, où une fertilisation variée s'est avérée apporter une valeur ajoutée directe en raison d'une meilleure qualité, la technologie a été plus largement adaptée.

Au début des années 2000, différents systèmes de direction assistée, tels que la direction automatique, ont été introduits sur le marché suédois. Les systèmes TIC en tant que systèmes de direction ou de guidage automatiques sont destinés à réduire les chevauchements, les heures de travail, la consommation d'énergie et à faciliter les nouveaux concepts agricoles tels que le trafic contrôlé. Au moins certains de ces avantages décrits sont à la fois faciles à comprendre et deviennent évidents simplement en regardant l'utilisation de la technologie en action, c'est-à-dire qu'ils fournissent un retour visuel momentané sur le terrain. L'intérêt des agriculteurs a été global depuis le début et ces technologies d'AP ont atteint une grande popularité juste après leur lancement. L'expérience de la mise en œuvre de ces applications d'AP simples est partagée en Allemagne (Busse et al. 2014) ainsi qu'en Europe centrale et du Nord, aux États-Unis et en Australie (Rapport du groupe de discussion EIP-Agri 2015). Il convient de souligner que par rapport au capteur Yara N, l'utilisation d'un système de pilotage nécessite également de nouvelles connaissances technologiques de la part de l'agriculteur, mais les deux systèmes exigent des types d'aide à la décision légèrement différents. Le Yara N-Sensor nécessite la saisie de données sur le rendement attendu et les besoins en engrais sur le site de référence, tandis que le système de direction nécessite uniquement de prendre une décision opérationnelle concernant la distance jusqu'à la voie suivante. Un système de direction dans un tracteur ou une moissonneuse présente quelques avantages pédagogiques évidents par rapport au capteur Yara N en permettant de comprendre les conséquences environnementales et économiques des actions effectuées, les effets immédiats pouvant être ressentis lors de la conduite du tracteur dans le champ . La performance des lignes droites et l'évitement des doubles passages ou des rangs manquants sont des résultats évidents et immédiats pour l'agriculteur. Les perceptions immédiates de l'agriculteur des avantages obtenus du capteur N par rapport aux technologies de direction assistée diffèrent donc. Payne et al. (2016) ont décrit neuf stratégies d'extension pour l'adoption de la technologie en fonction du type de technologie qui serait adoptée, de la poussée technologique aux stratégies de co-développement. Les technologies qui correspondent à la stratégie de poussée technologique se caractérisent par des problèmes non complexes, des impacts observables, une compatibilité élevée et une mise en œuvre facile, tandis que les technologies plus complexes sans avantages immédiatement observables et difficultés de test et de mise en œuvre ont plutôt besoin de stratégies de co-développement afin de être adopté. C'est probablement une explication centrale aux différences entre les adoptions de systèmes de direction automatique par rapport au capteur Yara N.

Une alternative pour optimiser l'utilisation de l'azote est l'AgriDSS nommé CropSAT (http://www.cropsat.se/), développé par POS au cours des années 2013-2014. CropSAT utilise des images satellites pour le calcul d'un indice de végétation (Qi et al. 1994) pour le calcul des fichiers VRA pour la fertilisation azotée des céréales. L'indice de végétation dans CropSAT est corrélé aux mesures effectuées avec le capteur Yara N (Söderström et al. 2015). Pour utiliser CropSAT, l'utilisateur lance l'application sur Internet, marque un champ dans une application Google Earth et l'indice de végétation d'une image satellite choisie est calculé et affiché sur le champ marqué dans Google Earth. Pour obtenir un fichier VRA, l'utilisateur doit décider de cinq niveaux de quantité d'azote liés à l'indice de végétation (voir Fig. 1). Lorsque les cinq niveaux sont définis, un fichier VRA pour le champ réel peut être calculé (voir Fig. 2) et transféré à un épandeur à l'aide d'une clé USB. La recommandation est que l'utilisateur se rende sur le terrain et vérifie les niveaux d'azote par des mesures du statut N absolu avec un Spadmeter (https://www.konicaminolta.eu/en/measuring-instruments/products/colour- mesure/chlorophyll-meter/spad-502plus/introduction.html) ou simplement en vérifiant le besoin de N supplémentaire avec sa propre expérience et ses connaissances sur la verdeur de la canopée et le statut N. En 2015, un prototype haute fidélité de CropSAT était disponible sur Internet, gratuit grâce au financement du Conseil suédois de l'agriculture. Les agriculteurs et les conseillers ont manifesté un intérêt considérable pour CropSAT. CropSAT pourrait être considéré comme une alternative au capteur N, mais avec une résolution inférieure. CropSAT permet l'observation directe de la variation interne de l'état de la canopée, ce qui semble très intéressant pour les agriculteurs participant au projet en cours lié aux POS. Jusqu'à présent, cependant, il a été souligné par les agriculteurs que la procédure/le processus de fixation des cinq niveaux de quantités d'azote semble être plus compliqué que prévu et doit être étudié plus avant.

Variation de l'indice de végétation calculée par l'AgriDSS CropSAT (http://www.cropsat.se) à partir d'une image satellite et visualisée sur un champ choisi dans Google Earth. Cinq niveaux d'apport d'azote sont fixés et peuvent servir de base aux calculs d'un VRA

Le fichier VRA appliqué à une carte Google Earth, prêt à être enregistré sur une clé USB et transféré à l'épandeur

Les technologies de sonorisation décrites ci-dessus ont eu un impact différent sur le marché suédois.Le capteur Yara N a été lancé dans les années 90, représentait un investissement pour l'utilisateur à la fois en termes d'apprentissage et de coût, résultant en un nouveau type d'équipement d'aide à la décision afin de régir la fertilisation. Les systèmes de direction ont été lancés sur le marché suédois au début des années 2000 et ont été assez rapidement adaptés à grande échelle. Cela était probablement dû aux avantages évidents des réductions de coûts ainsi qu'à l'instruction produite facilement et momentanément pour le VRA de N. Il convient de souligner qu'il est trop tôt pour évaluer la réponse de pénétration du marché de la technologie CropSAT. Le fait qu'un nombre important d'agriculteurs disposent déjà de la technologie nécessaire pour utiliser la technologie CropSAT, qu'elle est gratuite et gratuite, financée et payée par Greppa Näringen (un service de conseil financé par le gouvernement suédois et l'UE par le biais du Conseil suédois de l'agriculture) pourraient être des aspects importants pour sa disponibilité et son impact. Espérons que cela puisse contribuer à abaisser les barrières d'entrée au VRA de N et avoir un impact positif sur l'utilisation de la technologie PA par les agriculteurs suédois. D'une importance majeure pour l'impact futur est de savoir s'il est ou non perçu comme crédible et utile pour les pratiques de travail des agriculteurs. capteur, et dans quelle mesure le système CropSAT est considéré durable grâce à la conception reste à évaluer.


Existe-t-il un moyen de réduire rapidement la précision dans un certain nombre de champs DOUBLE ? - Systèmes d'information géographique

Chaque valeur manipulée par Oracle Database a un type de données . Le type de données d'une valeur associe un ensemble fixe de propriétés à la valeur. Ces propriétés amènent Oracle à traiter les valeurs d'un type de données différemment des valeurs d'un autre. Par exemple, vous pouvez ajouter des valeurs de type de données NUMBER, mais pas des valeurs de type de données RAW.

Lorsque vous créez une table ou un cluster, vous devez spécifier un type de données pour chacune de ses colonnes. Lorsque vous créez une procédure ou une fonction stockée, vous devez spécifier un type de données pour chacun de ses arguments. Ces types de données définissent le domaine de valeurs que chaque colonne peut contenir ou que chaque argument peut avoir. Par exemple, les colonnes DATE ne peuvent pas accepter la valeur 29 février (sauf pour une année bissextile) ou les valeurs 2 ou 'SHOE'. Chaque valeur placée par la suite dans une colonne suppose le type de données de la colonne. Par exemple, si vous insérez « 01-JAN-98 » dans une colonne DATE, Oracle traite la chaîne de caractères « 01-JAN-98 » comme une valeur DATE après avoir vérifié qu'elle se traduit par une date valide.

Oracle Database fournit un certain nombre de types de données intégrés ainsi que plusieurs catégories pour les types définis par l'utilisateur qui peuvent être utilisés comme types de données. La syntaxe des types de données Oracle apparaît dans les diagrammes qui suivent. Le texte de cette section est divisé en sections suivantes :

Un type de données est soit scalaire, soit non scalaire. Un type scalaire contient une valeur atomique, tandis qu'un type non scalaire (parfois appelé "collection") contient un ensemble de valeurs. Un grand objet (LOB) est une forme spéciale de type de données scalaire représentant une grande valeur scalaire de données binaires ou de caractères. Les LOB sont soumis à certaines restrictions qui n'affectent pas les autres types scalaires en raison de leur taille. Ces restrictions sont documentées dans le contexte de la syntaxe SQL appropriée.

Les précompilateurs Oracle reconnaissent d'autres types de données dans les programmes Embedded SQL. Ces types de données sont appelés types de données externes et sont associés à des variables hôtes. Ne confondez pas les types de données intégrés et les types définis par l'utilisateur avec les types de données externes. Pour plus d'informations sur les types de données externes, y compris sur la manière dont Oracle effectue la conversion entre eux et les types de données intégrés ou les types définis par l'utilisateur, consultez Pro*COBOL Programmer's Guide et Pro*C/C++ Programmer's Guide .

Les types de données intégrés à Oracle apparaissent dans les figures qui suivent. Pour les descriptions, reportez-vous à Oracle Built-in Data Types.

Les types de données pris en charge par ANSI apparaissent dans la figure qui suit. Types de données ANSI, DB2 et SQL/DS traite du mappage des types de données pris en charge par ANSI aux types de données intégrés à Oracle.

Pour les descriptions des types définis par l'utilisateur, reportez-vous à Types définis par l'utilisateur.

Les types de données fournis par Oracle apparaissent dans les figures qui suivent. Pour les descriptions, reportez-vous à Types fournis par Oracle.

Pour une description des types Any, reportez-vous à Tous les types.

Pour les descriptions des types XML, reportez-vous à Types XML.

Pour les descriptions des types spatiaux, reportez-vous à Types spatiaux.

Types de données intégrés à Oracle

Le tableau Résumé des types de données intégrés répertorie les types de données intégrés disponibles. Oracle Database utilise un code pour identifier le type de données en interne. Il s'agit du nombre dans la colonne Code du tableau Résumé des types de données intégrés. Vous pouvez vérifier les codes dans le tableau à l'aide de la fonction DUMP.

En plus des types de données intégrés répertoriés dans le tableau Résumé des types de données intégrés, Oracle Database utilise de nombreux types de données en interne qui sont visibles via la fonction DUMP.

Tableau 2-1 Récapitulatif des types de données intégrés

VARCHAR2 ( taille [ BYTE | CHAR ])

Chaîne de caractères de longueur variable ayant une longueur maximale d'octets ou de caractères. Vous devez spécifier la taille pour VARCHAR2 . La taille minimale est de 1 octet ou 1 caractère. La taille maximale est :

32767 octets ou caractères si MAX_STRING_SIZE = EXTENDED

4000 octets ou caractères si MAX_STRING_SIZE = STANDARD

Reportez-vous à Types de données étendus pour plus d'informations sur le paramètre d'initialisation MAX_STRING_SIZE.

BYTE indique que la colonne aura une sémantique de longueur d'octet. CHAR indique que la colonne aura une sémantique de caractère.

Chaîne de caractères Unicode de longueur variable ayant une longueur maximale de caractères. Vous devez spécifier la taille pour NVARCHAR2 . Le nombre d'octets peut atteindre jusqu'à deux fois la taille pour l'encodage AL16UTF16 et trois fois la taille pour l'encodage UTF8. La taille maximale est déterminée par la définition du jeu de caractères national, avec une limite supérieure de :

32767 octets si MAX_STRING_SIZE = EXTENDED

4000 octets si MAX_STRING_SIZE = STANDARD

Reportez-vous à Types de données étendus pour plus d'informations sur le paramètre d'initialisation MAX_STRING_SIZE.

Nombre de précision p et d'échelle s . La précision p peut aller de 1 à 38. L'échelle s peut aller de -84 à 127. La précision et l'échelle sont en chiffres décimaux. Une valeur NUMBER requiert de 1 à 22 octets.

Un sous-type du type de données NUMBER ayant une précision p . Une valeur FLOAT est représentée en interne par NUMBER . La précision p peut aller de 1 à 126 chiffres binaires. Une valeur FLOAT nécessite de 1 à 22 octets.

Données de caractères de longueur variable jusqu'à 2 gigaoctets, ou 2 31 -1 octets. Fourni pour la compatibilité descendante.

La plage de dates de validité s'étend du 1er janvier 4712 avant JC au 31 décembre 9999 après JC. Le format par défaut est déterminé explicitement par le paramètre NLS_DATE_FORMAT ou implicitement par le paramètre NLS_TERRITORY. La taille est fixée à 7 octets. Ce type de données contient les champs datetime YEAR , MONTH , DAY , HOUR , MINUTE et SECOND . Il n'a pas de fractions de seconde ni de fuseau horaire.

nombre à virgule flottante 32 bits. Ce type de données nécessite 4 octets.

nombre à virgule flottante 64 bits. Ce type de données nécessite 8 octets.

Valeurs de l'année, du mois et du jour de la date, ainsi que les valeurs de l'heure, des minutes et des secondes, où fractional_seconds_precision est le nombre de chiffres dans la partie fractionnaire du champ SECOND datetime. Les valeurs acceptées de fractional_seconds_precision sont comprises entre 0 et 9. La valeur par défaut est 6. Le format par défaut est déterminé explicitement par le paramètre NLS_TIMESTAMP_FORMAT ou implicitement par le paramètre NLS_TERRITORY. La taille est de 7 ou 11 octets, selon la précision. Ce type de données contient les champs datetime YEAR , MONTH , DAY , HOUR , MINUTE et SECOND . Il contient des fractions de seconde mais n'a pas de fuseau horaire.

TIMESTAMP [( fractional_seconds_precision )] AVEC FUSEAU HORAIRE

Toutes les valeurs de TIMESTAMP ainsi que la valeur de déplacement du fuseau horaire, où fractional_seconds_precision est le nombre de chiffres dans la partie fractionnaire du champ SECOND datetime. Les valeurs acceptées sont comprises entre 0 et 9. La valeur par défaut est 6. Le format de date par défaut pour le type de données TIMESTAMP WITH TIME ZONE est déterminé par le paramètre d'initialisation NLS_TIMESTAMP_TZ_FORMAT. La taille est fixée à 13 octets. Ce type de données contient les champs datetime YEAR , MONTH , DAY , HOUR , MINUTE , SECOND , TIMEZONE_HOUR et TIMEZONE_MINUTE . Il a des fractions de seconde et un fuseau horaire explicite.

TIMESTAMP [( fractional_seconds_precision )] AVEC LE FUSEAU HORAIRE LOCAL

Toutes les valeurs de TIMESTAMP WITH TIME ZONE , avec les exceptions suivantes :

Les données sont normalisées par rapport au fuseau horaire de la base de données lorsqu'elles sont stockées dans la base de données.

Lorsque les données sont récupérées, les utilisateurs voient les données dans le fuseau horaire de la session.

Le format par défaut est déterminé explicitement par le paramètre NLS_TIMESTAMP_FORMAT ou implicitement par le paramètre NLS_TERRITORY. La taille est de 7 ou 11 octets, selon la précision.

INTERVAL YEAR [( year_precision )] AU MOIS

Stocke une période en années et en mois, où year_precision est le nombre de chiffres dans le champ YEAR datetime. Les valeurs acceptées sont de 0 à 9. La valeur par défaut est 2. La taille est fixée à 5 octets.

INTERVAL DAY [( day_precision )] À SECOND [( fractional_seconds_precision )]

Stocke une période de temps en jours, heures, minutes et secondes, où

day_precision est le nombre maximum de chiffres dans le champ DAY datetime. Les valeurs acceptées sont de 0 à 9. La valeur par défaut est 2.

fractional_seconds_precision est le nombre de chiffres dans la partie fractionnaire du champ SECOND. Les valeurs acceptées sont de 0 à 9. La valeur par défaut est 6.

La taille est fixée à 11 octets.

Données binaires brutes de longueur taille octets. Vous devez spécifier la taille pour une valeur RAW. La taille maximale est :

32767 octets si MAX_STRING_SIZE = EXTENDED

2000 octets si MAX_STRING_SIZE = STANDARD

Reportez-vous à Types de données étendus pour plus d'informations sur le paramètre d'initialisation MAX_STRING_SIZE.

Données binaires brutes de longueur variable jusqu'à 2 gigaoctets.

Chaîne en base 64 représentant l'adresse unique d'une ligne de sa table. Ce type de données est principalement destiné aux valeurs renvoyées par la pseudo-colonne ROWID.

Chaîne en base 64 représentant l'adresse logique d'une ligne d'une table organisée en index. La taille facultative est la taille d'une colonne de type UROWID . La taille maximale et la valeur par défaut sont de 4000 octets.

Données de caractères de longueur fixe de longueur en octets ou en caractères. La taille maximale est de 2000 octets ou caractères. La taille par défaut et minimale est de 1 octet.

BYTE et CHAR ont la même sémantique que pour VARCHAR2 .

Données de caractères de longueur fixe de caractères de taille de longueur. Le nombre d'octets peut atteindre jusqu'à deux fois la taille pour l'encodage AL16UTF16 et trois fois la taille pour l'encodage UTF8. La taille maximale est déterminée par la définition du jeu de caractères national, avec une limite supérieure de 2000 octets. La taille par défaut et minimale est de 1 caractère.

Un grand objet caractère contenant des caractères à un ou plusieurs octets. Les jeux de caractères à largeur fixe et variable sont pris en charge, tous deux utilisant le jeu de caractères de la base de données. La taille maximale est de (4 gigaoctets - 1) * (taille du bloc de la base de données).

Un grand objet de caractère contenant des caractères Unicode. Les jeux de caractères à largeur fixe et variable sont pris en charge, tous deux utilisant le jeu de caractères national de la base de données. La taille maximale est de (4 gigaoctets - 1) * (taille du bloc de la base de données). Stocke les données du jeu de caractères national.

Un grand objet binaire. La taille maximale est de (4 gigaoctets - 1) * (taille du bloc de la base de données).

Contient un localisateur vers un gros fichier binaire stocké en dehors de la base de données. Active l'accès d'E/S de flux d'octets aux LOB externes résidant sur le serveur de base de données. La taille maximale est de 4 gigaoctets.

Les sections qui suivent décrivent les types de données Oracle tels qu'ils sont stockés dans la base de données Oracle. Pour plus d'informations sur la spécification de ces types de données en tant que littéraux, reportez-vous à Littéraux.

Types de données de caractères

Les types de données caractère stockent les données caractères (alphanumériques), qui sont des mots et du texte libre, dans le jeu de caractères de la base de données ou le jeu de caractères national. Ils sont moins restrictifs que les autres types de données et ont par conséquent moins de propriétés. Par exemple, les colonnes de caractères peuvent stocker toutes les valeurs alphanumériques, mais les colonnes NUMBER ne peuvent stocker que des valeurs numériques.

Les données de caractères sont stockées dans des chaînes avec des valeurs d'octets correspondant à l'un des jeux de caractères, tels que 7 bits ASCII ou EBCDIC, spécifiés lors de la création de la base de données. Oracle Database prend en charge les jeux de caractères à un et plusieurs octets.

Ces types de données sont utilisés pour les données de caractères :

Pour plus d'informations sur la spécification des types de données de caractères en tant que littéraux, reportez-vous à Littéraux de texte.

Type de données CHAR

Le type de données CHAR spécifie une chaîne de caractères de longueur fixe dans le jeu de caractères de la base de données. Vous spécifiez le jeu de caractères de la base de données lorsque vous créez votre base de données.

Lorsque vous créez une table avec une colonne CHAR, vous spécifiez la longueur de la colonne en tant que taille, éventuellement suivie d'un qualificateur de longueur. Le qualificateur BYTE dénote une sémantique de longueur d'octet tandis que le qualificateur CHAR dénote une sémantique de longueur de caractère. Dans la sémantique de longueur d'octet, la taille est le nombre d'octets à stocker dans la colonne. Dans la sémantique de la longueur des caractères, la taille est le nombre de points de code dans le jeu de caractères de la base de données à stocker dans la colonne. Un point de code peut avoir de 1 à 4 octets en fonction du jeu de caractères de la base de données et du caractère particulier codé par le point de code. Oracle vous recommande de spécifier l'un des qualificatifs de longueur pour documenter explicitement la sémantique de longueur souhaitée de la colonne. Si vous ne spécifiez pas de qualificateur, la valeur du paramètre NLS_LENGTH_SEMANTICS de la session créant la colonne définit la sémantique de longueur, sauf si la table appartient au schéma SYS , auquel cas la sémantique par défaut est BYTE .

Oracle garantit que toutes les valeurs stockées dans une colonne CHAR ont la longueur spécifiée par taille dans la sémantique de longueur sélectionnée. Si vous insérez une valeur plus courte que la longueur de la colonne, Oracle remplace la valeur par la longueur de la colonne. Si vous essayez d'insérer une valeur trop longue pour la colonne, Oracle renvoie une erreur. Notez que si la longueur de la colonne est exprimée en caractères (points de code), le remplissage des blancs ne garantit pas que toutes les valeurs de colonne ont la même longueur en octets.

Vous pouvez omettre la taille de la définition de colonne. La valeur par défaut est 1.

La valeur maximale de size est 2000, ce qui signifie 2000 octets ou caractères (points de code), selon la sémantique de longueur sélectionnée. Cependant, indépendamment, la longueur maximale absolue de toute valeur de caractère pouvant être stockée dans une colonne CHAR est de 2000 octets. Par exemple, même si vous définissez la longueur de colonne sur 2 000 caractères, Oracle renvoie une erreur si vous essayez d'insérer une valeur de 2 000 caractères dans laquelle un ou plusieurs points de code sont plus larges que 1 octet. La valeur de taille en caractères est une contrainte de longueur, pas de capacité garantie. Si vous souhaitez qu'une colonne CHAR puisse toujours stocker des caractères de taille dans n'importe quel jeu de caractères de base de données, utilisez une valeur de taille inférieure ou égale à 500.

Pour garantir une conversion correcte des données entre les bases de données et les clients avec des jeux de caractères différents, vous devez vous assurer que les données CHAR sont constituées de chaînes bien formées.

Oracle Database Globalization Support Guide pour plus d'informations sur la prise en charge des jeux de caractères et Data Type Comparison Rules pour plus d'informations sur la sémantique de comparaison

Type de données NCHAR

Le type de données NCHAR spécifie une chaîne de caractères de longueur fixe dans le jeu de caractères national. Vous spécifiez le jeu de caractères national en tant que AL16UTF16 ou UTF8 lorsque vous créez votre base de données. AL16UTF16 et UTF8 sont deux formes de codage du jeu de caractères Unicode (UTF-16 et CESU-8, en conséquence) et, par conséquent, NCHAR est un type de données Unicode uniquement.

Lorsque vous créez une table avec une colonne NCHAR, vous spécifiez la longueur de la colonne en tant que caractères de taille, ou plus précisément, des points de code dans le jeu de caractères national. Un point de code a toujours 2 octets en AL16UTF16 et de 1 à 3 octets en UTF8, selon le caractère particulier encodé par le point de code.

Oracle garantit que toutes les valeurs stockées dans une colonne NCHAR ont la longueur des caractères de taille. Si vous insérez une valeur plus courte que la longueur de la colonne, Oracle remplace la valeur par la longueur de la colonne. Si vous essayez d'insérer une valeur trop longue pour la colonne, Oracle renvoie une erreur. Notez que si le jeu de caractères national est UTF8, le remplissage des blancs ne garantit pas que toutes les valeurs de colonne ont la même longueur d'octet.

Vous pouvez omettre la taille de la définition de colonne. La valeur par défaut est 1.

La valeur maximale de la taille est de 1000 caractères lorsque le jeu de caractères national est AL16UTF16 et de 2000 caractères lorsque le jeu de caractères national est UTF8. Cependant, indépendamment, la longueur maximale absolue de toute valeur de caractère pouvant être stockée dans une colonne NCHAR est de 2000 octets. Par exemple, même si vous définissez la longueur de la colonne sur 1 000 caractères, Oracle renvoie une erreur si vous essayez d'insérer une valeur de 1 000 caractères mais que le jeu de caractères national est UTF8 et que tous les points de code ont une largeur de 3 octets. La valeur de la taille est une contrainte de longueur, et non une capacité garantie. Si vous souhaitez qu'une colonne NCHAR puisse toujours stocker des caractères de taille dans les deux jeux de caractères nationaux, utilisez une valeur de taille inférieure ou égale à 666.

Pour garantir une conversion correcte des données entre les bases de données et les clients avec des jeux de caractères différents, vous devez vous assurer que les données NCHAR se composent de chaînes bien formées.

Si vous affectez une valeur CHAR à une colonne NCHAR, la valeur est implicitement convertie du jeu de caractères de la base de données au jeu de caractères national. Si vous affectez une valeur NCHAR à une colonne CHAR, la valeur est implicitement convertie du jeu de caractères national au jeu de caractères de la base de données. Si certains des caractères de la valeur NCHAR ne peuvent pas être représentés dans le jeu de caractères de la base de données, alors si la valeur du paramètre de session NLS_NCHAR_CONV_EXCP est TRUE , Oracle signale une erreur. Si la valeur du paramètre est FALSE , les caractères non représentables sont remplacés par le caractère de remplacement par défaut du jeu de caractères de la base de données, qui est généralement le point d'interrogation '?' ou le point d'interrogation inversé '¿'.

Oracle Database Globalization Support Guide pour plus d'informations sur la prise en charge du type de données Unicode

Type de données VARCHAR2

Le type de données VARCHAR2 spécifie une chaîne de caractères de longueur variable dans le jeu de caractères de la base de données. Vous spécifiez le jeu de caractères de la base de données lorsque vous créez votre base de données.

Lorsque vous créez une table avec une colonne VARCHAR2, vous devez spécifier la longueur de la colonne en tant que taille éventuellement suivie d'un qualificateur de longueur. Le qualificateur BYTE dénote une sémantique de longueur d'octet tandis que le qualificateur CHAR dénote une sémantique de longueur de caractère. Dans la sémantique de longueur d'octet, la taille est le nombre maximal d'octets pouvant être stockés dans la colonne. Dans la sémantique de la longueur des caractères, la taille est le nombre maximal de points de code dans le jeu de caractères de la base de données qui peuvent être stockés dans la colonne. Un point de code peut avoir de 1 à 4 octets en fonction du jeu de caractères de la base de données et du caractère particulier codé par le point de code. Oracle vous recommande de spécifier l'un des qualificatifs de longueur pour documenter explicitement la sémantique de longueur souhaitée de la colonne.Si vous ne spécifiez pas de qualificateur, la valeur du paramètre NLS_LENGTH_SEMANTICS de la session créant la colonne définit la sémantique de longueur, sauf si la table appartient au schéma SYS , auquel cas la sémantique par défaut est BYTE .

Oracle stocke une valeur de caractère dans une colonne VARCHAR2 exactement telle que vous la spécifiez, sans aucun espacement, à condition que la valeur ne dépasse pas la longueur de la colonne. Si vous essayez d'insérer une valeur qui dépasse la longueur spécifiée, Oracle renvoie une erreur.

La valeur minimale de la taille est 1. La valeur maximale est :

32767 octets si MAX_STRING_SIZE = EXTENDED

4000 octets si MAX_STRING_SIZE = STANDARD

Reportez-vous à Types de données étendus pour plus d'informations sur le paramètre d'initialisation MAX_STRING_SIZE et les mécanismes de stockage interne pour les types de données étendus.

Alors que la taille peut être exprimée en octets ou en caractères (points de code), la longueur maximale absolue indépendante de toute valeur de caractère pouvant être stockée dans une colonne VARCHAR2 est de 32767 ou 4000 octets, selon MAX_STRING_SIZE . Par exemple, même si vous définissez la longueur de colonne sur 32767 caractères, Oracle renvoie une erreur si vous essayez d'insérer une valeur de 32767 caractères dans laquelle un ou plusieurs points de code sont plus larges que 1 octet. La valeur de taille en caractères est une contrainte de longueur, pas de capacité garantie. Si vous souhaitez qu'une colonne VARCHAR2 puisse toujours stocker des caractères de taille dans n'importe quel jeu de caractères de base de données, utilisez une valeur de taille inférieure ou égale à 8191, si MAX_STRING_SIZE = EXTENDED , ou 1000, si MAX_STRING_SIZE = STANDARD .

Oracle compare les valeurs VARCHAR2 à l'aide d'une sémantique de comparaison non complétée.

Pour garantir une conversion correcte des données entre les bases de données avec des jeux de caractères différents, vous devez vous assurer que les données VARCHAR2 sont constituées de chaînes bien formées. Voir Oracle Database Globalization Support Guide pour plus d'informations sur la prise en charge des jeux de caractères.

Règles de comparaison des types de données pour plus d'informations sur la sémantique de comparaison

Type de données VARCHAR

N'utilisez pas le type de données VARCHAR. Utilisez plutôt le type de données VARCHAR2. Bien que le type de données VARCHAR soit actuellement synonyme de VARCHAR2 , il est prévu que le type de données VARCHAR soit redéfini en tant que type de données distinct utilisé pour les chaînes de caractères de longueur variable par rapport à différentes sémantiques de comparaison.

Type de données NVARCHAR2

Le type de données NVARCHAR2 spécifie une chaîne de caractères de longueur variable dans le jeu de caractères national. Vous spécifiez le jeu de caractères national en tant que AL16UTF16 ou UTF8 lorsque vous créez votre base de données. AL16UTF16 et UTF8 sont deux formes de codage du jeu de caractères Unicode (UTF-16 et CESU-8, en conséquence) et, par conséquent, NVARCHAR2 est un type de données Unicode uniquement.

Lorsque vous créez une table avec une colonne NVARCHAR2, vous devez spécifier la longueur de la colonne en tant que caractères de taille, ou plus précisément, des points de code dans le jeu de caractères national. Un point de code a toujours 2 octets en AL16UTF16 et de 1 à 3 octets en UTF8, selon le caractère particulier encodé par le point de code.

Oracle stocke une valeur de caractère dans une colonne NVARCHAR2 exactement telle que vous la spécifiez, sans aucun espacement, à condition que la valeur ne dépasse pas la longueur de la colonne. Si vous essayez d'insérer une valeur qui dépasse la longueur spécifiée, Oracle renvoie une erreur.

La valeur minimale de la taille est 1. La valeur maximale est :

16383 si MAX_STRING_SIZE = EXTENDED et le jeu de caractères national est AL16UTF16

32767 si MAX_STRING_SIZE = EXTENDED et le jeu de caractères national est UTF8

2000 si MAX_STRING_SIZE = STANDARD et le jeu de caractères national est AL16UTF16

4000 si MAX_STRING_SIZE = STANDARD et le jeu de caractères national est UTF8

Reportez-vous à Types de données étendus pour plus d'informations sur le paramètre d'initialisation MAX_STRING_SIZE et les mécanismes de stockage interne pour les types de données étendus.

Indépendamment de la longueur maximale de la colonne en caractères, la longueur maximale absolue de toute valeur pouvant être stockée dans une colonne NVARCHAR2 est de 32767 ou 4000 octets, en fonction de MAX_STRING_SIZE . Par exemple, même si vous définissez la longueur de la colonne sur 16383 caractères, Oracle renvoie une erreur si vous essayez d'insérer une valeur de 16383 caractères mais que le jeu de caractères national est UTF8 et que tous les points de code ont une largeur de 3 octets. La valeur de la taille est une contrainte de longueur, et non une capacité garantie. Si vous souhaitez qu'une colonne NVARCHAR2 puisse toujours stocker des caractères de taille dans les deux jeux de caractères nationaux, utilisez une valeur de taille inférieure ou égale à 10922, si MAX_STRING_SIZE = EXTENDED , ou 1333, si MAX_STRING_SIZE = STANDARD .

Oracle compare les valeurs NVARCHAR2 à l'aide d'une sémantique de comparaison non complétée.

Pour garantir une conversion correcte des données entre les bases de données et les clients avec des jeux de caractères différents, vous devez vous assurer que les données NVARCHAR2 sont constituées de chaînes bien formées.

Si vous affectez une valeur VARCHAR2 à une colonne NVARCHAR2, la valeur est implicitement convertie du jeu de caractères de la base de données au jeu de caractères national. Si vous affectez une valeur NVARCHAR2 à une colonne VARCHAR2, la valeur est implicitement convertie du jeu de caractères national au jeu de caractères de la base de données. Si certains des caractères de la valeur NVARCHAR2 ne peuvent pas être représentés dans le jeu de caractères de la base de données, alors si la valeur du paramètre de session NLS_NCHAR_CONV_EXCP est TRUE , Oracle signale une erreur. Si la valeur du paramètre est FALSE , les caractères non représentables sont remplacés par le caractère de remplacement par défaut du jeu de caractères de la base de données, qui est généralement le point d'interrogation '?' ou le point d'interrogation inversé '¿'.

Oracle Database Globalization Support Guide pour plus d'informations sur la prise en charge du type de données Unicode.

Types de données numériques

Les types de données numériques d'Oracle Database stockent des nombres fixes et flottants positifs et négatifs, zéro, l'infini et des valeurs qui sont le résultat indéfini d'une opération — "pas un nombre" ou NAN . Pour plus d'informations sur la spécification de types de données numériques en tant que littéraux, reportez-vous à Littéraux numériques.

NOMBRE Type de données

Le type de données NUMBER stocke zéro ainsi que des nombres fixes positifs et négatifs avec des valeurs absolues de 1,0 x 10 -130 à mais non compris 1,0 x 10 126 . Si vous spécifiez une expression arithmétique dont la valeur a une valeur absolue supérieure ou égale à 1,0 x 10 126 , Oracle renvoie une erreur. Chaque valeur NUMBER requiert de 1 à 22 octets.

Spécifiez un nombre à virgule fixe à l'aide du formulaire suivant :

p est la précision , ou le nombre maximal de chiffres décimaux significatifs, où le chiffre le plus significatif est le chiffre différent de zéro le plus à gauche et le chiffre le moins significatif est le chiffre connu le plus à droite. Oracle garantit la portabilité des nombres avec une précision allant jusqu'à 20 chiffres en base 100, ce qui équivaut à 39 ou 40 chiffres décimaux selon la position de la virgule décimale.

s est l'échelle , ou le nombre de chiffres de la virgule au chiffre le moins significatif. L'échelle peut aller de -84 à 127.

L'échelle positive est le nombre de chiffres significatifs à droite de la virgule décimale jusqu'au chiffre le moins significatif inclus.

L'échelle négative est le nombre de chiffres significatifs à gauche de la virgule décimale, jusqu'au chiffre le moins significatif mais non compris. Pour une échelle négative, le chiffre le moins significatif se trouve à gauche de la virgule décimale, car les données réelles sont arrondies au nombre de positions spécifié à gauche de la virgule décimale. Par exemple, une spécification de (10,-2) signifie arrondir à des centaines.

L'échelle peut être supérieure à la précision, le plus souvent lorsque la notation e est utilisée. Lorsque l'échelle est supérieure à la précision, la précision spécifie le nombre maximal de chiffres significatifs à droite de la virgule décimale. Par exemple, une colonne définie comme NUMBER(4,5) requiert un zéro pour le premier chiffre après la virgule décimale et arrondit toutes les valeurs au-delà du cinquième chiffre après la virgule décimale.

Il est recommandé de spécifier l'échelle et la précision d'une colonne de nombres à virgule fixe pour un contrôle d'intégrité supplémentaire en entrée. La spécification de l'échelle et de la précision ne force pas toutes les valeurs à une longueur fixe. Si une valeur dépasse la précision, Oracle renvoie une erreur. Si une valeur dépasse l'échelle, Oracle l'arrondit.

Spécifiez un nombre entier à l'aide du formulaire suivant :

Cela représente un nombre à virgule fixe avec une précision p et une échelle 0 et équivaut à NUMBER(p,0) .

Spécifiez un nombre à virgule flottante à l'aide du formulaire suivant :

L'absence d'indicateurs de précision et d'échelle spécifie la plage et la précision maximales d'un nombre Oracle.

Le tableau 2-2 montre comment Oracle stocke les données en utilisant différentes précisions et échelles.


RAPIDE ET FACILE

@heridev et moi avons créé une petite fonction dans jQuery.

Le problème avec les valeurs à virgule flottante est qu'elles essaient de représenter une quantité infinie de valeurs (continues) avec une quantité fixe de bits. Alors naturellement, il doit y avoir une certaine perte en jeu, et vous allez être mordu par certaines valeurs.

Lorsqu'un ordinateur stocke 1,275 en tant que valeur à virgule flottante, il ne se souviendra pas réellement s'il s'agissait de 1,275 ou 1,27499999999999993, ou même 1,27500000000000002. Ces valeurs devraient donner des résultats différents après avoir été arrondies à deux décimales, mais elles ne le feront pas, car pour l'ordinateur elles ressemblent exactement le même après stockage en tant que valeurs à virgule flottante, et il n'y a aucun moyen de restaurer les données perdues. Tout autre calcul ne fera qu'accumuler cette imprécision.

Donc, si la précision compte, vous devez éviter les valeurs à virgule flottante dès le départ. Les options les plus simples sont de

  • utiliser une bibliothèque dédiée
  • utiliser des chaînes pour stocker et transmettre les valeurs (accompagnées d'opérations sur les chaînes)
  • utilisez des nombres entiers (par exemple, vous pourriez transmettre le montant des centièmes de votre valeur réelle, par exemple un montant en cents au lieu d'un montant en dollars)

Par exemple, lorsque vous utilisez des entiers pour stocker le nombre de centièmes, la fonction pour trouver la valeur réelle est assez simple :

Avec des chaînes, vous aurez besoin d'arrondir, mais cela reste gérable :

Notez que cette fonction arrondit au plus proche, liens loin de zéro, tandis que IEEE 754 recommande d'arrondir au plus proche, liens à même comme comportement par défaut pour les opérations à virgule flottante. De telles modifications sont laissées en exercice au lecteur :)


Contenu

L'agriculture de précision est un élément clé de la troisième vague de révolutions agricoles modernes. La première révolution agricole a été l'augmentation de l'agriculture mécanisée, de 1900 à 1930. Chaque agriculteur a produit suffisamment de nourriture pour nourrir environ 26 personnes pendant cette période. [12] Les années 1960 ont déclenché la Révolution verte avec de nouvelles méthodes de modification génétique, qui ont conduit chaque agriculteur à nourrir environ 156 personnes. [12] On s'attend à ce que d'ici 2050, la population mondiale atteigne environ 9,6 milliards, et la production alimentaire doit effectivement doubler par rapport aux niveaux actuels afin de nourrir toutes les bouches. Avec les nouvelles avancées technologiques de la révolution agricole de l'agriculture de précision, chaque agriculteur pourra nourrir 265 personnes sur la même superficie. [12]

La première vague de la révolution de l'agriculture de précision a pris la forme d'images satellite et aériennes, de prévisions météorologiques, d'applications d'engrais à taux variable et d'indicateurs de santé des cultures. La deuxième vague agrège les données de la machine pour une plantation, une cartographie topographique et des données de sol encore plus précises. [13]

L'agriculture de précision vise à optimiser la gestion au champ en ce qui concerne :

    : en faisant mieux correspondre les pratiques agricoles aux besoins des cultures (ex. apports d'engrais) : en réduisant les risques environnementaux et l'empreinte de l'agriculture (ex. limitation du lessivage de l'azote) : en renforçant la compétitivité par des pratiques plus efficaces (ex. meilleure gestion de l'utilisation des engrais et autres intrants) .

L’agriculture de précision fournit également aux agriculteurs une mine d’informations pour :

  • constituer un dossier de leur ferme
  • améliorer la prise de décision
  • favoriser une plus grande traçabilité
  • améliorer la commercialisation des produits agricoles
  • améliorer les baux et les relations avec les propriétaires
  • améliorer la qualité inhérente des produits agricoles (par exemple le niveau de protéines dans la farine panifiable de blé)

Plantation normative Modifier

Plantation normative est un type de système agricole qui fournit des conseils de plantation basés sur des données qui peuvent déterminer des taux de plantation variables pour s'adapter à des conditions variables sur un seul champ, afin de maximiser le rendement. Il a été décrit comme « Big Data à la ferme ». Monsanto, DuPont et d'autres lancent cette technologie aux États-Unis. [14] [15]

L'agriculture de précision utilise de nombreux outils mais voici quelques éléments de base : tracteurs, moissonneuses-batteuses, pulvérisateurs, planteuses, excavatrices, qui sont tous considérés comme des systèmes d'autoguidage. Les petits appareils sur les équipements qui utilisent le SIG (système d'information géographique) sont ce qui fait de la précision ce qu'elle est. Vous pouvez considérer le système SIG comme le « cerveau ». Pour pouvoir utiliser l'agriculture de précision, l'équipement doit être câblé avec la bonne technologie et les bons systèmes de données. D'autres outils incluent la technologie à taux variable (VRT), le système de positionnement global et le système d'information géographique, l'échantillonnage de grille et les capteurs à distance. [16]

Géolocalisation Modifier

La géolocalisation d'un champ permet à l'agriculteur de superposer les informations recueillies à partir de l'analyse des sols et de l'azote résiduel, et des informations sur les cultures précédentes et la résistivité du sol. La géolocalisation se fait de deux manières

  • Le champ est délimité à l'aide d'un récepteur GPS embarqué pendant que l'agriculteur conduit un tracteur autour du champ.
  • Le champ est délimité sur un fond de carte dérivé d'images aériennes ou satellitaires. Les images de base doivent avoir le bon niveau de résolution et de qualité géométrique pour garantir une géolocalisation suffisamment précise.

Variables Modifier

La variabilité intra et inter-champ peut résulter d'un certain nombre de facteurs. Ceux-ci incluent les conditions climatiques (grêle, sécheresse, pluie, etc.), les sols (texture, profondeur, niveaux d'azote), les pratiques culturales (culture sans labour), les mauvaises herbes et les maladies. Des indicateurs permanents, principalement des indicateurs de sol, renseignent les agriculteurs sur les principales constantes environnementales. Des indicateurs ponctuels leur permettent de suivre l'état d'une culture, c'est-à-dire de voir si des maladies se développent, si la culture souffre de stress hydrique, de stress azoté ou de verse, si elle a été endommagée par la glace, etc. Ces informations peuvent provenir de stations météorologiques et d'autres capteurs (résistivité électrique du sol, détection à l'œil nu, imagerie satellitaire, etc.). Les mesures de résistivité du sol combinées à l'analyse du sol permettent de mesurer le taux d'humidité. La résistivité du sol est également une mesure relativement simple et bon marché. [17]

Stratégies Modifier

À l'aide de cartes pédologiques, les agriculteurs peuvent appliquer deux stratégies pour ajuster les intrants sur le terrain :

  • Approche prédictive : basée sur l'analyse d'indicateurs statiques (sol, résistivité, historique des champs, etc.) au cours du cycle de culture.
  • Démarche de lutte : les informations issues des indicateurs statiques sont régulièrement mises à jour au cours du cycle de culture par :
    • échantillonnage : pesée de la biomasse, mesure de la teneur en chlorophylle des feuilles, pesée des fruits, etc.
    • télédétection : la mesure de paramètres tels que la température (air/sol), l'humidité (air/sol/feuille), le vent ou le diamètre de la tige est possible grâce aux réseaux de capteurs sans fil[18] et à l'Internet des objets (IoT)
    • Détection par procuration : des capteurs embarqués mesurent l'état des feuilles, ce qui oblige l'agriculteur à parcourir tout le champ en voiture.
    • télédétection aérienne ou satellitaire : des images multispectrales sont acquises et traitées pour dériver des cartes des paramètres biophysiques des cultures, y compris les indicateurs de maladie. [19] Les instruments aéroportés sont capables de mesurer la quantité de couvert végétal et de faire la distinction entre les cultures et les mauvaises herbes. [20]

    Les décisions peuvent être basées sur des modèles d'aide à la décision (modèles de simulation de cultures et modèles de recommandation) basés sur des mégadonnées, mais en dernière analyse, c'est à l'agriculteur de décider en termes de valeur commerciale et d'impacts sur l'environnement - un rôle étant pris en charge par des systèmes d'intelligence artificielle (IA) basés sur l'apprentissage automatique et les réseaux de neurones artificiels.

    Il est important de comprendre pourquoi la technologie de l'AP est ou n'est pas adoptée, « pour que l'adoption de la technologie de l'AP se produise, l'agriculteur doit percevoir la technologie comme utile et facile à utiliser. Il peut être insuffisant d'avoir des données extérieures positives sur les avantages économiques de l'AP. la technologie que les perceptions des agriculteurs doivent refléter ces considérations économiques. [21]

    Pratiques de mise en œuvre Modifier

    Les nouvelles technologies de l'information et de la communication rendent la gestion des cultures au champ plus opérationnelle et plus facile à réaliser pour les agriculteurs. L'application des décisions de gestion des cultures nécessite des équipements agricoles prenant en charge la technologie à taux variable (VRT), par exemple une densité de semences variable ainsi qu'une application à taux variable (VRA) d'azote et de produits phytosanitaires. [22]

    L'agriculture de précision utilise la technologie sur les équipements agricoles (par exemple les tracteurs, les pulvérisateurs, les moissonneuses-batteuses, etc.) :

      (par exemple, les récepteurs GPS qui utilisent des signaux satellites pour déterminer avec précision une position sur le globe) (SIG), c'est-à-dire un logiciel qui donne un sens à toutes les données disponibles
  • matériel agricole à débit variable (semoir, épandeur).
  • Le concept d'agriculture de précision est apparu pour la première fois aux États-Unis au début des années 1980. En 1985, des chercheurs de l'Université du Minnesota ont varié les apports de chaux dans les champs cultivés. C'est aussi à cette époque qu'est apparue la pratique de l'échantillonnage en grille (application d'une grille fixe d'un échantillon par hectare). Vers la fin des années 1980, cette technique a été utilisée pour dériver les premières cartes de recommandations d'intrants pour les engrais et les corrections de pH. L'utilisation de capteurs de rendement développés à partir de nouvelles technologies, combinée à l'avènement des récepteurs GPS, gagne du terrain depuis. Aujourd'hui, ces systèmes couvrent plusieurs millions d'hectares.

    Dans le Midwest américain (États-Unis), il n'est pas associé à l'agriculture durable mais aux agriculteurs traditionnels qui essaient de maximiser leurs profits en dépensant de l'argent uniquement dans les zones qui nécessitent des engrais. Cette pratique permet à l'agriculteur de faire varier le taux d'engrais à travers le champ en fonction du besoin identifié par la grille guidée par GPS ou l'échantillonnage de zone. L'engrais qui aurait été épandu dans des zones qui n'en ont pas besoin peut être placé dans des zones qui en ont besoin, optimisant ainsi son utilisation.

    Partout dans le monde, l'agriculture de précision s'est développée à un rythme variable. Les pays précurseurs étaient les États-Unis, le Canada et l'Australie. En Europe, le Royaume-Uni a été le premier à s'engager dans cette voie, suivi de près par la France, où il est apparu pour la première fois en 1997-1998. En Amérique latine, le pays leader est l'Argentine, où il a été introduit au milieu des années 90 avec le soutien de l'Institut national de technologie agricole. Le Brésil a créé une entreprise d'État, Embrapa, pour rechercher et développer une agriculture durable. Le développement du GPS et des techniques d'épandage à débit variable a permis d'ancrer les pratiques de gestion de l'agriculture de précision [23]. Aujourd'hui, moins de 10 % des agriculteurs français sont équipés de systèmes à taux variable. L'utilisation du GPS est plus répandue, mais cela ne les a pas empêchés d'utiliser les services d'agriculture de précision, qui fournissent des cartes de recommandations au niveau du terrain. [24]

    Un tiers de la population mondiale vit encore de l'agriculture. [25] Bien que les technologies agricoles de précision plus avancées nécessitent d'importants investissements initiaux, les agriculteurs des pays en développement bénéficient de la technologie mobile. Ce service aide les agriculteurs avec des paiements et des reçus mobiles pour améliorer l'efficacité. Par exemple, 30 000 agriculteurs en Tanzanie utilisent des téléphones portables pour les contrats, les paiements, les prêts et l'organisation commerciale. [25]

    Les bénéfices économiques et environnementaux de l'agriculture de précision ont également été confirmés en Chine, mais la Chine est à la traîne de pays comme l'Europe et les États-Unis car le système agricole chinois est caractérisé par des exploitations familiales à petite échelle, ce qui rend le taux d'adoption de agriculture de précision inférieure à celle des autres pays. Par conséquent, la Chine essaie de mieux introduire la technologie de l'agriculture de précision dans son propre pays et de réduire certains risques, ouvrant ainsi la voie à la technologie chinoise pour développer une agriculture de précision à l'avenir. [26]

    L'agriculture de précision, comme son nom l'indique, signifie l'application d'une quantité précise et correcte d'intrants tels que l'eau, les engrais, les pesticides, etc. au bon moment sur la culture pour augmenter sa productivité et maximiser ses rendements. Les pratiques de gestion agricole de précision peuvent réduire considérablement la quantité de nutriments et d'autres intrants agricoles utilisés tout en augmentant les rendements. [27] Les agriculteurs obtiennent ainsi un retour sur investissement en économisant sur les coûts d'eau, de pesticides et d'engrais.

    Le deuxième avantage à plus grande échelle du ciblage des intrants concerne les impacts environnementaux. L'application de la bonne quantité de produits chimiques au bon endroit et au bon moment profite aux cultures, aux sols et aux eaux souterraines, et donc à l'ensemble du cycle de culture. [28] Par conséquent, l'agriculture de précision est devenue une pierre angulaire de l'agriculture durable, car elle respecte les cultures, les sols et les agriculteurs. L'agriculture durable cherche à assurer un approvisionnement continu en nourriture dans les limites écologiques, économiques et sociales requises pour soutenir la production à long terme.

    Un article de 2013 a tenté de montrer que l'agriculture de précision peut aider les agriculteurs des pays en développement comme l'Inde. [29]

    L'agriculture de précision réduit la pression sur l'agriculture pour l'environnement en augmentant l'efficacité des machines et en les mettant en service. Par exemple, l'utilisation de dispositifs de gestion à distance tels que le GPS réduit la consommation de carburant pour l'agriculture, tandis que l'application à taux variable de nutriments ou de pesticides peut potentiellement réduire l'utilisation de ces intrants, réduisant ainsi les coûts et le ruissellement nocif dans les cours d'eau. [30]

    L'agriculture de précision est une application de technologies agricoles numériques révolutionnaires. Plus de 4,6 milliards de dollars ont été investis dans des entreprises de technologie agricole, parfois appelées agtech. [12]

    Robots Modifier

    Les tracteurs autodirecteurs existent depuis un certain temps déjà, car l'équipement John Deere fonctionne comme un avion sur pilote automatique. Le tracteur effectue la plupart du travail, l'agriculteur intervenant en cas d'urgence. [28] La technologie évolue vers des machines sans conducteur programmées par GPS pour épandre des engrais ou labourer la terre. D'autres innovations incluent une machine à énergie solaire qui identifie les mauvaises herbes et les tue avec précision avec une dose d'herbicide ou de lasers. [28] Des robots agricoles, également connus sous le nom d'AgBots, existent déjà, mais des robots de récolte avancés sont en cours de développement pour identifier les fruits mûrs, s'adapter à leur forme et à leur taille et les arracher soigneusement des branches. [31]

    Drones et imagerie satellite Modifier

    La technologie des drones et des satellites est utilisée dans l'agriculture de précision. Cela se produit souvent lorsque les drones prennent des images de haute qualité tandis que les satellites capturent une image plus grande. Les pilotes d'avions légers peuvent combiner la photographie aérienne avec des données d'enregistrements satellitaires pour prédire les rendements futurs en fonction du niveau actuel de la biomasse sur le terrain. Les images agrégées peuvent créer des cartes de contours pour suivre où s'écoule l'eau, déterminer l'ensemencement à taux variable et créer des cartes de rendement des zones qui étaient plus ou moins productives. [28]

    L'Internet des objets Modifier

    L'Internet des objets est le réseau d'objets physiques équipés d'électronique qui permet la collecte et l'agrégation de données. L'IoT entre en jeu avec le développement de capteurs [32] et de logiciels de gestion agricole. Par exemple, les agriculteurs peuvent mesurer par spectroscopie l'azote, le phosphore et le potassium dans le lisier, ce qui est notoirement incohérent. [28] Ils peuvent ensuite scanner le sol pour voir où les vaches ont déjà uriné et appliquer de l'engrais uniquement aux endroits qui en ont besoin. Cela réduit l'utilisation d'engrais jusqu'à 30 %. [31] Des capteurs d'humidité [33] dans le sol déterminent les meilleurs moments pour arroser les plantes à distance. Les systèmes d'irrigation peuvent être programmés pour changer de côté du tronc d'arbre qu'ils arrosent en fonction des besoins de la plante et des précipitations. [28]

    Les innovations ne se limitent pas aux plantes, elles peuvent être utilisées pour le bien-être des animaux. Les bovins peuvent être équipés de capteurs internes pour suivre l'acidité de l'estomac et les problèmes digestifs. Des capteurs externes suivent les schémas de mouvement pour déterminer la santé et la forme physique de la vache, détecter les blessures physiques et identifier les moments optimaux pour la reproduction. [28] Toutes ces données provenant de capteurs peuvent être agrégées et analysées pour détecter des tendances et des modèles.

    Autre exemple, la technologie de surveillance peut être utilisée pour rendre l'apiculture plus efficace. Les abeilles ont une valeur économique importante et fournissent un service vital à l'agriculture en pollinisant une variété de cultures. La surveillance de la santé d'une colonie d'abeilles grâce à des capteurs sans fil de température, d'humidité et de CO2 aide à améliorer la productivité des abeilles et à lire les avertissements précoces dans les données qui pourraient menacer la survie même d'une ruche entière. [34]

    Applications Smartphone Modifier

    Les applications pour smartphones et tablettes sont de plus en plus populaires dans l'agriculture de précision. Les smartphones sont livrés avec de nombreuses applications utiles déjà installées, notamment l'appareil photo, le microphone, le GPS et l'accéléromètre. Il existe également des applications dédiées à diverses applications agricoles telles que la cartographie des champs, le suivi des animaux, l'obtention d'informations météorologiques et agricoles, etc. Ils sont facilement portables, abordables et ont une puissance de calcul élevée. [35]

    Apprentissage automatique Modifier

    L'apprentissage automatique est couramment utilisé en conjonction avec les drones, les robots et les appareils de l'Internet des objets. Il permet la saisie des données de chacune de ces sources. L'ordinateur traite ensuite ces informations et renvoie les actions appropriées à ces appareils. Cela permet aux robots de fournir la quantité parfaite d'engrais ou aux appareils IoT de fournir la quantité parfaite d'eau directement au sol. [36] L'apprentissage automatique peut également fournir des prédictions aux agriculteurs au moment où ils en ont besoin, telles que la teneur en azote disponible pour les plantes dans le sol, pour guider la planification de la fertilisation. [37] À mesure que l'agriculture devient de plus en plus numérique, l'apprentissage automatique sous-tendra une agriculture efficace et précise avec moins de travail manuel.


    11 réponses 11

    Vous ne pouvez pas définir la précision d'un double (ou Double) sur un nombre spécifié de chiffres décimaux, car les valeurs à virgule flottante n'ont pas de chiffres décimaux. Ils ont des chiffres binaires.

    Vous devrez convertir en une base décimale, soit via BigDecimal ou DecimalFormat , selon ce que vous voulez faire avec la valeur plus tard.

    Voir aussi ma réponse à cette question pour une réfutation des inévitables réponses *100/100.

    Vous pouvez essayer BigDecimal à cette fin

    C'est un moyen facile de le faire :

    Il fixe la précision à 2 chiffres.

    Si vous souhaitez uniquement imprimer, utilisez-le de cette façon :

    Définir la précision pour les valeurs doubles DecimalFormat est une bonne technique. Pour utiliser cette classe importez java.text.DecimalFormat et créez-en un objet par exemple

    Donc, il imprimera deux chiffres après la virgule décimale ici, il imprimera 12.79

    Voici un moyen efficace d'obtenir le résultat avec deux mises en garde.

    1. Limite la précision à N chiffres « maximum » (non fixé à N chiffres).
    2. Arrondit le nombre à l'inférieur (pas au plus proche).

    Voir des exemples de cas de test ici.

    Voici le code. Les deux mises en garde que j'ai mentionnées ci-dessus peuvent être résolues assez facilement, cependant, la vitesse m'importait plus que la précision, alors je l'ai laissée ici. Les manipulations de chaînes telles que System.out.printf("%.2f",123.234) sont coûteuses en calculs par rapport aux opérations mathématiques. Dans mes tests, le code ci-dessous (sans le sysout) a pris 1/30e du temps par rapport aux manipulations de String.

    La précision de double et float est fixée par leur taille et la manière dont les types à virgule flottante IEEE sont implémentés.

    Le nombre de chiffres décimaux dans la sortie, en revanche, est une question de formatage. Vous avez raison de dire que taper la même constante encore et encore est une mauvaise idée. Vous devez plutôt déclarer une constante de chaîne et utiliser sa représentation symbolique.

    L'utilisation d'une représentation symbolique vous permettrait de modifier la précision à tous les endroits où la constante est utilisée sans rechercher dans votre code.

    Pour développer @EJP, le concept de «précision» lorsqu'il s'agit de doubles est extrêmement lourd. Comme indiqué dans https://stackoverflow.com/a/3730040/390153, vous ne pouvez même pas représenter 0,1 en tant que double quelle que soit la précision, pour la même raison, vous ne pouvez pas représenter 1/3 en base 10 avec une précision finie.

    Vous devez considérer le problème que vous essayez de résoudre et considérer :

    a) Dois-je utiliser des doubles en premier lieu si la précision est un concept pertinent, alors l'utilisation de doubles pourrait bien être une erreur.

    b) Si les doubles sont appropriés, qu'est-ce que j'entends par précision ? Si vous ne parlez que d'affichage, enveloppez la logique dans une fonction d'affichage et vous n'aurez besoin de la traiter qu'à un seul endroit, c'est-à-dire. appliquer le principe DRY.


    Contenu

    Nombres à virgule flottante Modifier

    Une représentation numérique spécifie une manière de coder un nombre, généralement sous la forme d'une chaîne de chiffres.

    Il existe plusieurs mécanismes par lesquels des chaînes de chiffres peuvent représenter des nombres. Dans la notation mathématique courante, la chaîne de chiffres peut être de n'importe quelle longueur, et l'emplacement du point de base est indiqué en y plaçant un caractère "point" explicite (point ou virgule). Si le point de base n'est pas spécifié, la chaîne représente implicitement un entier et le point de base non indiqué se trouverait à l'extrémité droite de la chaîne, à côté du chiffre le moins significatif. Dans les systèmes à virgule fixe, une position dans la chaîne est spécifiée pour le point de base. Ainsi, un schéma à virgule fixe pourrait consister à utiliser une chaîne de 8 chiffres décimaux avec la virgule décimale au milieu, où "00012345" représenterait 0001.2345.

    En notation scientifique, le nombre donné est mis à l'échelle par une puissance de 10, de sorte qu'il se situe dans une certaine plage, généralement entre 1 et 10, le point de base apparaissant immédiatement après le premier chiffre. Le facteur d'échelle, en puissance de dix, est alors indiqué séparément à la fin du nombre. Par exemple, la période orbitale de la lune Io de Jupiter est de 152 853,5047 secondes, une valeur qui serait représentée en notation scientifique standard comme 1,528535047 × 10 5 secondes.

    La représentation à virgule flottante est similaire dans son concept à la notation scientifique. Logiquement, un nombre à virgule flottante se compose de :

    • Une chaîne de chiffres signée (c'est-à-dire positive ou négative) d'une longueur donnée dans une base (ou base) donnée. Cette chaîne de chiffres est appelée signifiant, mantisse, ou alors coefficient. [nb 1] La longueur de la mantisse détermine le précision auxquels les nombres peuvent être représentés. La position du point de base est supposée toujours se trouver quelque part dans la mantisse, souvent juste après ou juste avant le chiffre le plus significatif, ou à droite du chiffre le plus à droite (le moins significatif). Cet article suit généralement la convention selon laquelle le point de base est défini juste après le chiffre le plus significatif (le plus à gauche).
    • Un exposant entier signé (également appelé caractéristique, ou alors échelle), [nb 2] qui modifie la grandeur du nombre.

    Pour dériver la valeur du nombre à virgule flottante, le signifiant est multiplié par le base élevé au pouvoir de la exposant, équivalent à décaler le point de base de sa position implicite d'un nombre de places égal à la valeur de l'exposant — vers la droite si l'exposant est positif ou vers la gauche si l'exposant est négatif.

    En utilisant la base 10 (la notation décimale familière) comme exemple, le nombre 152 853,5047 , qui a dix chiffres décimaux de précision, est représenté par le significand 1 528 535 047 avec 5 comme exposant. Pour déterminer la valeur réelle, un point décimal est placé après le premier chiffre de la mantisse et le résultat est multiplié par 10 5 pour donner 1,528535047 × 10 5 , ou 152 853,5047 . Lors du stockage d'un tel nombre, la base (10) n'a pas besoin d'être stockée, car elle sera la même pour toute la plage de nombres pris en charge, et peut donc être déduite.

    Symboliquement, cette valeur finale est :

    où s est la mantisse (en ignorant tout point décimal implicite), p est la précision (le nombre de chiffres dans la mantisse), b est la base (dans notre exemple, c'est le nombre Dix), et e est l'exposant.

    Historiquement, plusieurs bases de nombres ont été utilisées pour représenter les nombres à virgule flottante, la base deux (binaire) étant la plus courante, suivie de la base dix (virgule flottante décimale) et d'autres variétés moins courantes, telles que la base seize (virgule flottante hexadécimale) [2] [3] [nb 3] ), base huit (virgule flottante octale [4] [3] [5] [2] [nb 4] ), base quatre (virgule flottante quaternaire [6] [3] [nb 5] ), base trois (virgule flottante ternaire équilibrée [4] ) et même base 256 [3] [nb 6] et base 65,536 . [7] [n° 7]

    Un nombre à virgule flottante est un nombre rationnel, car il peut être représenté comme un entier divisé par un autre, par exemple 1,45 × 10 3 est (145/100) × 1000 ou 145 000 /100. La base détermine les fractions qui peuvent être représentées par exemple, 1/5 ne peut pas être représenté exactement comme un nombre à virgule flottante en utilisant une base binaire, mais 1/5 peut être représenté exactement en utilisant une base décimale ( 0,2 , ou 2 × 10 − 1 ). Cependant, 1/3 ne peut être représenté exactement ni en binaire (0.010101. ) ni en décimal (0.333. ), mais en base 3, il est trivial (0,1 ou 1×3 −1 ) . Les occasions où se produisent des expansions infinies dépendent de la base et de ses facteurs premiers.

    La manière dont la mantisse (y compris son signe) et l'exposant sont stockés dans un ordinateur dépend de la mise en œuvre. Les formats IEEE courants sont décrits en détail plus loin et ailleurs, mais à titre d'exemple, dans la représentation binaire à virgule flottante simple précision (32 bits), p = 24 , et donc la mantisse est un chaîne de 24 bits. Par exemple, les 33 premiers bits du nombre sont :

    Dans cette expansion binaire, notons les positions de 0 (bit le plus à gauche, ou bit le plus significatif) à 32 (bit le plus à droite). La mantisse 24 bits s'arrêtera à la position 23, indiquée par le bit 0 souligné ci-dessus. Le bit suivant, à la position 24, est appelé le peu rond ou alors peu d'arrondi. Il permet d'arrondir l'approximation de 33 bits au nombre de 24 bits le plus proche (il existe des règles spécifiques pour les valeurs intermédiaires, ce qui n'est pas le cas ici). Ce bit, qui est à 1 dans cet exemple, est ajouté à l'entier formé par les 24 bits les plus à gauche, ce qui donne :

    Lorsqu'il est stocké en mémoire à l'aide du codage IEEE 754, il devient la mantisse s . La mantisse est supposée avoir un point binaire à droite du bit le plus à gauche. Ainsi, la représentation binaire de est calculée de gauche à droite comme suit :

    où p est la précision ( 24 dans cet exemple), n est la position du bit de la mantisse en partant de la gauche (commençant à 0 et finissant à 23 ici) et e est l'exposant ( 1 dans cet exemple).

    Il peut être exigé que le chiffre le plus significatif de la mantisse d'un nombre non nul soit non nul (sauf lorsque l'exposant correspondant serait plus petit que le minimum). Ce processus est appelé normalisation. Pour les formats binaires (qui n'utilisent que les chiffres 0 et 1 ), ce chiffre non nul est nécessairement 1 . Par conséquent, il n'a pas besoin d'être représenté en mémoire, ce qui permet au format d'avoir un bit de précision de plus. Cette règle est diversement appelée la convention de bits de tête, les convention de bits implicite, les convention de bits cachés, [4] ou le convention de bits supposée.

    Alternatives aux nombres à virgule flottante Modifier

    La représentation à virgule flottante est de loin la façon la plus courante de représenter dans les ordinateurs une approximation des nombres réels. Cependant, il existe des alternatives :

      la représentation utilise des opérations matérielles entières contrôlées par une implémentation logicielle d'une convention spécifique concernant l'emplacement du point binaire ou décimal, par exemple, 6 bits ou chiffres à partir de la droite. Le matériel pour manipuler ces représentations est moins coûteux que la virgule flottante, et il peut également être utilisé pour effectuer des opérations normales sur les entiers. Le point fixe binaire est généralement utilisé dans des applications spéciales sur des processeurs embarqués qui ne peuvent faire que de l'arithmétique entière, mais le point fixe décimal est courant dans les applications commerciales. (LNS) représentent un nombre réel par le logarithme de sa valeur absolue et un bit de signe. La distribution de la valeur est similaire à la virgule flottante, mais la courbe valeur-représentation (c'est à dire., le graphique de la fonction logarithme) est lisse (sauf à 0). Contrairement à l'arithmétique à virgule flottante, dans un système de nombres logarithmiques, la multiplication, la division et l'exponentiation sont simples à mettre en œuvre, mais l'addition et la soustraction sont complexes. L'arithmétique d'indice de niveau (symétrique) (LI et SLI) de Charles Clenshaw, Frank Olver et Peter Turner est un schéma basé sur une représentation logarithmique généralisée. , qui ne semble pas être utilisé dans la pratique.
    • Lorsqu'une plus grande précision est souhaitée, l'arithmétique à virgule flottante peut être implémentée (généralement dans un logiciel) avec des significandes de longueur variable (et parfois des exposants) qui sont dimensionnées en fonction des besoins réels et de la manière dont le calcul se déroule. C'est ce qu'on appelle l'arithmétique à virgule flottante de précision arbitraire.
    • Les expansions en virgule flottante sont un autre moyen d'obtenir une plus grande précision, en profitant du matériel à virgule flottante : un nombre est représenté comme une somme non évaluée de plusieurs nombres à virgule flottante. Un exemple est l'arithmétique double-double, parfois utilisée pour le type C long double .
    • Quelques nombres rationnels simples (par exemple., 1/3 et 1/10) ne peuvent pas être représentés exactement en virgule flottante binaire, quelle que soit la précision. L'utilisation d'une base différente permet de représenter certaines d'entre elles (par exemple., 1/10 en virgule flottante décimale), mais les possibilités restent limitées. Les progiciels qui exécutent l'arithmétique rationnelle représentent les nombres sous forme de fractions avec un numérateur et un dénominateur entiers, et peuvent donc représenter exactement n'importe quel nombre rationnel. De tels packages doivent généralement utiliser l'arithmétique "bignum" pour les entiers individuels. permet de représenter des nombres sous forme d'intervalles et d'obtenir des limites garanties sur les résultats.Elle est généralement basée sur d'autres arithmétiques, notamment en virgule flottante. tels que Mathematica, Maxima et Maple peuvent souvent gérer des nombres irrationnels comme π ou 3 >> d'une manière complètement "formelle", sans traiter un encodage spécifique du signifiant. Un tel programme peut évaluer des expressions telles que " sin ⁡ ( 3 π ) " exactement, car il est programmé pour traiter directement les mathématiques sous-jacentes, au lieu d'utiliser des valeurs approximatives pour chaque calcul intermédiaire.

    Historique Modifier

    En 1914, Leonardo Torres y Quevedo a conçu une version électromécanique du moteur analytique de Charles Babbage et a inclus l'arithmétique à virgule flottante. [8] En 1938, Konrad Zuse de Berlin a terminé le Z1, le premier ordinateur mécanique programmable binaire [9] il utilise une représentation binaire à virgule flottante de 24 bits avec un exposant signé de 7 bits, une mantisse de 17 bits ( comprenant un bit implicite) et un bit de signe. [10] Le Z3, plus fiable, basé sur le relais, achevé en 1941, a des représentations à la fois pour les infinis positifs et négatifs en particulier, il implémente des opérations définies avec l'infini, telles que 1 / ∞ = 0 /_< infty >=0> , et il s'arrête sur des opérations non définies, telles que 0 × ∞ .

    Zuse a également proposé, mais n'a pas terminé, une arithmétique à virgule flottante soigneusement arrondie qui inclut des représentations ± ∞ et NaN, anticipant les caractéristiques de la norme IEEE de quatre décennies. [11] En revanche, von Neumann a recommandé contre les nombres à virgule flottante pour la machine IAS 1951, en faisant valoir que l'arithmétique à virgule fixe est préférable. [11]

    La première commercial ordinateur avec du matériel à virgule flottante était l'ordinateur Z4 de Zuse, conçu en 1942-1945. En 1946, Bell Laboratories a introduit le Mark V, qui implémentait des nombres décimaux à virgule flottante. [12]

    Le Pilot ACE a une arithmétique binaire à virgule flottante, et il est devenu opérationnel en 1950 au National Physical Laboratory, Royaume-Uni. Trente-trois ont ensuite été vendus commercialement sous le nom d'English Electric DEUCE. L'arithmétique est en fait implémentée dans un logiciel, mais avec une fréquence d'horloge d'un mégahertz, la vitesse des opérations en virgule flottante et en virgule fixe dans cette machine était initialement plus rapide que celle de nombreux ordinateurs concurrents.

    L'IBM 704 produit en série a suivi en 1954, il a introduit l'utilisation d'un exposant biaisé. Pendant de nombreuses décennies après cela, le matériel à virgule flottante était généralement une fonctionnalité facultative, et les ordinateurs qui l'avaient étaient considérés comme des « ordinateurs scientifiques » ou comme ayant une capacité de « calcul scientifique » (SC) (voir aussi Extensions for Scientific Computation (XSC )). Ce n'est qu'au lancement de l'Intel i486 en 1989 que à usage général les ordinateurs personnels avaient une capacité à virgule flottante dans le matériel en tant que caractéristique standard.

    La série UNIVAC 1100/2200, introduite en 1962, prenait en charge deux représentations à virgule flottante :

    • Simple précision : 36 bits, organisés en signe 1 bit, exposant 8 bits et mantisse 27 bits.
    • Double precision: 72 bits, organisés en signe 1 bit, exposant 11 bits et mantisse 60 bits.

    L'IBM 7094, également introduit en 1962, prend en charge les représentations simple précision et double précision, mais sans aucun rapport avec les représentations UNIVAC. En effet, en 1964, IBM a introduit des représentations à virgule flottante hexadécimale dans ses mainframes System/360. Ces mêmes représentations sont toujours disponibles pour une utilisation dans les systèmes z/Architecture modernes. Cependant, en 1998, IBM a inclus l'arithmétique à virgule flottante binaire compatible IEEE à ses mainframes en 2005, IBM a également ajouté l'arithmétique à virgule flottante décimale compatible IEEE.

    Initialement, les ordinateurs utilisaient de nombreuses représentations différentes pour les nombres à virgule flottante. Le manque de normalisation au niveau de l'ordinateur central était un problème permanent au début des années 1970 pour ceux qui écrivaient et maintenaient un code source de niveau supérieur. Ces normes à virgule flottante du fabricant différaient par la taille des mots, les représentations, le comportement d'arrondi et la précision générale des opérations. . La compatibilité en virgule flottante entre plusieurs systèmes informatiques avait désespérément besoin d'être normalisée au début des années 1980, ce qui a conduit à la création de la norme IEEE 754 une fois que le mot 32 bits (ou 64 bits) était devenu courant. Cette norme était largement basée sur une proposition d'Intel, qui concevait le coprocesseur numérique i8087, Motorola, qui concevait le 68000 à peu près à la même époque, a également apporté une contribution importante.

    En 1989, le mathématicien et informaticien William Kahan a reçu le prix Turing pour avoir été le principal architecte derrière cette proposition, avec l'aide de son étudiant (Jerome Coonen) et d'un professeur invité (Harold Stone). [13]

    Parmi les innovations x86 figurent celles-ci :

    • Une représentation à virgule flottante spécifiée avec précision au niveau de la chaîne de bits, de sorte que tous les ordinateurs compatibles interprètent les modèles de bits de la même manière. Cela permet de transférer avec précision et efficacité des nombres à virgule flottante d'un ordinateur à un autre (après avoir pris en compte le caractère endian).
    • Un comportement précisément spécifié pour les opérations arithmétiques : un résultat doit être produit comme si une arithmétique infiniment précise était utilisée pour produire une valeur qui est ensuite arrondie selon des règles spécifiques. Cela signifie qu'un programme informatique conforme produirait toujours le même résultat lorsqu'il recevait une entrée particulière, atténuant ainsi la réputation presque mystique que le calcul en virgule flottante s'était développée pour son comportement jusque-là apparemment non déterministe.
    • La capacité de conditions exceptionnelles (débordement, division par zéro, etc.) à se propager à travers un calcul de manière bénigne puis à être gérées par le logiciel de manière contrôlée.

    Un nombre à virgule flottante se compose de deux composantes à virgule fixe, dont la plage dépend exclusivement du nombre de bits ou de chiffres dans leur représentation. Alors que les composants dépendent linéairement de leur plage, la plage à virgule flottante dépend linéairement de la plage de significande et de manière exponentielle de la plage du composant exposant, qui attache une plage considérablement plus large au nombre.

    Sur un système informatique typique, un double precision (64 bits) nombre à virgule flottante binaire a un coefficient de 53 bits (y compris 1 bit implicite), un exposant de 11 bits et 1 bit de signe. Puisque 2 10 = 1024, la plage complète des nombres à virgule flottante normaux positifs dans ce format est de 2 −1022 2 × 10 −308 à environ 2 1024 ≈ 2 × 10 308 .

    Le nombre de nombres à virgule flottante normalisés dans un système (B, P, L, U) où

    • B est la base du système,
    • P est la précision de la mantisse (en base B),
    • L est le plus petit exposant du système,
    • U est le plus grand exposant du système,

    Il existe un plus petit nombre à virgule flottante normalisé positif,

    Niveau de débordement = UFL = B L > ,

    qui a un 1 comme chiffre de tête et 0 pour les chiffres restants de la mantisse, et la plus petite valeur possible pour l'exposant.

    Il existe un plus grand nombre à virgule flottante,

    qui a B − 1 comme valeur pour chaque chiffre de la mantisse et la plus grande valeur possible pour l'exposant.

    De plus, il existe des valeurs représentables strictement comprises entre −UFL et UFL. À savoir, les zéros positifs et négatifs, ainsi que les nombres dénormalisés.

    L'IEEE a normalisé la représentation informatique des nombres binaires à virgule flottante dans IEEE 754 (alias IEC 60559) en 1985. Cette première norme est suivie par presque toutes les machines modernes. Il a été révisé en 2008. Les mainframes IBM prennent en charge le format à virgule flottante hexadécimale d'IBM et la virgule flottante décimale IEEE 754-2008 en plus du format binaire IEEE 754. La série Cray T90 avait une version IEEE, mais le SV1 utilise toujours le format à virgule flottante Cray. [ citation requise ]

    La norme prévoit de nombreux formats étroitement liés, ne différant que par quelques détails. Cinq de ces formats sont appelés formats de base, et d'autres sont appelés formats de précision étendue et format de précision extensible. Trois formats sont particulièrement largement utilisés dans le matériel informatique et les langages : [ citation requise ]

      (binary32), généralement utilisé pour représenter le type "float" dans la famille du langage C (bien que cela ne soit pas garanti). Il s'agit d'un format binaire qui occupe 32 bits (4 octets) et sa mantisse a une précision de 24 bits (environ 7 chiffres décimaux). (binary64), généralement utilisé pour représenter le type "double" dans la famille du langage C (bien que cela ne soit pas garanti). Il s'agit d'un format binaire qui occupe 64 bits (8 octets) et sa mantisse a une précision de 53 bits (environ 16 chiffres décimaux). , également appelé de manière ambiguë format de « précision étendue ». Il s'agit d'un format binaire qui occupe au moins 79 bits (80 si la règle des bits cachés/implicites n'est pas utilisée) et sa mantisse a une précision d'au moins 64 bits (environ 19 chiffres décimaux). Les normes C99 et C11 de la famille des langages C, dans leur annexe F ("CEI 60559 arithmétique à virgule flottante"), recommandent qu'un tel format étendu soit fourni comme "long double". [14] Un format satisfaisant aux exigences minimales (précision de significande 64 bits, exposant 15 bits, s'adaptant ainsi à 80 bits) est fourni par l'architecture x86. Souvent sur de tels processeurs, ce format peut être utilisé avec "long double", bien que la précision étendue ne soit pas disponible avec MSVC. À des fins d'alignement, de nombreux outils stockent cette valeur de 80 bits dans un espace de 96 ou 128 bits. [15][16] Sur d'autres processeurs, "long double" peut signifier un format plus grand, comme la quadruple précision, [17] ou juste la double précision, si aucune forme de précision étendue n'est disponible. [18]

    L'augmentation de la précision de la représentation à virgule flottante réduit généralement la quantité d'erreurs d'arrondi accumulées causées par les calculs intermédiaires. [19] Les formats IEEE moins courants incluent :

      (binaire128). Il s'agit d'un format binaire qui occupe 128 bits (16 octets) et sa mantisse a une précision de 113 bits (environ 34 chiffres décimaux). et décimal128 formats à virgule flottante. Ces formats, ainsi que le format decimal32, sont destinés à effectuer correctement l'arrondi décimal. , également appelé binary16, une valeur à virgule flottante de 16 bits. Il est utilisé dans le langage graphique NVIDIA Cg et dans la norme openEXR. [20]

    Tout entier avec une valeur absolue inférieure à 2 24 peut être exactement représenté dans le format simple précision, et tout entier avec une valeur absolue inférieure à 2 53 peut être exactement représenté dans le format double précision. De plus, une large gamme de puissances de 2 fois un tel nombre peut être représentée. Ces propriétés sont parfois utilisées pour des données purement entières, pour obtenir des entiers 53 bits sur des plates-formes qui ont des flottants double précision mais uniquement des entiers 32 bits.

    La norme spécifie certaines valeurs spéciales et leur représentation : l'infini positif (+∞), l'infini négatif (−∞), un zéro négatif (−0) distinct du zéro ordinaire (« positif ») et les valeurs « pas un nombre » ( NaNs).

    La comparaison de nombres à virgule flottante, telle que définie par la norme IEEE, est un peu différente de la comparaison d'entiers habituelle. Les zéros négatifs et positifs se comparent égaux, et chaque NaN se compare inégal à chaque valeur, y compris lui-même. Tous les nombres finis à virgule flottante sont strictement inférieurs à +∞ et strictement supérieurs à −∞, et ils sont ordonnés de la même manière que leurs valeurs (dans l'ensemble des nombres réels).

    Représentation interne Modifier

    Les nombres à virgule flottante sont généralement regroupés dans une donnée informatique en tant que bit de signe, champ exposant et mantisse ou mantisse, de gauche à droite. Pour les formats binaires IEEE 754 (de base et étendu) qui ont des implémentations matérielles existantes, ils sont répartis comme suit :

    Alors que l'exposant peut être positif ou négatif, dans les formats binaires, il est stocké sous la forme d'un nombre non signé auquel est ajouté un "biais" fixe. Les valeurs de tous les 0 dans ce champ sont réservées aux zéros et les valeurs des nombres inférieurs à la normale de tous les 1 sont réservées aux infinis et aux NaN. La plage d'exposants pour les nombres normalisés est [−126, 127] pour une simple précision, [−1022, 1023] pour double ou [−16382, 16383] pour quad. Les nombres normalisés excluent les valeurs subnormales, les zéros, les infinis et les NaN.

    Dans les formats d'échange binaire IEEE, le premier bit d'une mantisse normalisée n'est pas réellement stocké dans la donnée informatique. C'est ce qu'on appelle le bit "caché" ou "implicite". Pour cette raison, le format simple précision a en fait une mantisse avec 24 bits de précision, le format double précision en a 53 et le quad en a 113.

    Par exemple, il a été montré ci-dessus que , arrondi à 24 bits de précision, a :

    La somme du biais de l'exposant (127) et de l'exposant (1) est 128, donc cela est représenté dans un format simple précision comme

    Un exemple d'une disposition pour la virgule flottante 32 bits est

    Valeurs spéciales Modifier

    Signé zéro Modifier

    Dans la norme IEEE 754, zéro est signé, ce qui signifie qu'il existe à la fois un "zéro positif" (+0) et un "zéro négatif" (-0). Dans la plupart des environnements d'exécution, le zéro positif est généralement imprimé sous la forme " 0 " et le zéro négatif sous la forme " -0 ". Les deux valeurs se comportent comme égales dans les comparaisons numériques, mais certaines opérations renvoient des résultats différents pour +0 et −0. Par exemple, 1/(−0) renvoie l'infini négatif, tandis que 1/+0 renvoie l'infini positif (de sorte que l'identité 1/(1/±∞) = ±∞ est maintenue). Autres fonctions communes avec une discontinuité à X=0 qui pourrait traiter différemment +0 et -0, inclure log(X), signum(X), et la racine carrée principale de oui + xi pour tout nombre négatif oui. Comme pour tout schéma d'approximation, les opérations impliquant un "zéro négatif" peuvent parfois prêter à confusion. Par exemple, dans IEEE 754, X = oui n'implique pas toujours 1/X = 1/oui , comme 0 = −0 mais 1/0 1/−0 . [22]

    Nombres subnormaux Modifier

    Les valeurs subnormales remplissent l'espace de sous-verse avec des valeurs où la distance absolue entre elles est la même que pour les valeurs adjacentes juste à l'extérieur de l'espace de sous-verse. Il s'agit d'une amélioration par rapport à l'ancienne pratique consistant à n'avoir que zéro dans l'espace de sous-débordement, et où les résultats de sous-débordement étaient remplacés par zéro (affleurant à zéro). [4]

    Le matériel à virgule flottante moderne gère généralement les valeurs subnormales (ainsi que les valeurs normales) et ne nécessite pas d'émulation logicielle pour les subnormales.

    Infinis Modifier

    Les infinis de la ligne des nombres réels étendus peuvent être représentés dans des types de données à virgule flottante IEEE, tout comme les valeurs à virgule flottante ordinaires comme 1, 1,5, etc. Ce ne sont en aucun cas des valeurs d'erreur, bien qu'elles le soient souvent (mais pas toujours, car cela dépend de l'arrondi) utilisées comme valeurs de remplacement en cas de débordement. En cas d'exception de division par zéro, un infini positif ou négatif est renvoyé comme résultat exact. Un infini peut également être introduit sous forme de chiffre (comme la macro "INFINITY" de C, ou "∞" si le langage de programmation autorise cette syntaxe).

    IEEE 754 exige que les infinis soient traités de manière raisonnable, comme

    NaNs Modifier

    IEEE 754 spécifie une valeur spéciale appelée « Pas un nombre » (NaN) à renvoyer à la suite de certaines opérations « invalides », telles que 0/0, ×0 ou sqrt(−1). En général, les NaN seront propagés, c'est-à-dire que la plupart des opérations impliquant un NaN aboutiront à un NaN, bien que les fonctions qui donneraient un résultat défini pour une valeur à virgule flottante donnée le feront également pour les NaN, par ex. NaN ^ 0 = 1. Il existe deux types de NaN : la valeur par défaut calmer NaNs et, éventuellement, signalisation NaNs. Une signalisation NaN dans toute opération arithmétique (y compris les comparaisons numériques) entraînera la signalisation d'une exception "opération non valide".

    La représentation des NaN spécifiée par la norme comporte des bits non spécifiés qui pourraient être utilisés pour coder le type ou la source d'erreur, mais il n'y a pas de norme pour ce codage. En théorie, les NaN de signalisation pourraient être utilisés par un système d'exécution pour signaler des variables non initialisées, ou étendre les nombres à virgule flottante avec d'autres valeurs spéciales sans ralentir les calculs avec des valeurs ordinaires, bien que de telles extensions ne soient pas courantes.

    Justification de la conception IEEE 754 Modifier

    C'est une idée fausse commune que les caractéristiques les plus ésotériques de la norme IEEE 754 discutées ici, telles que les formats étendus, NaN, les infinis, les sous-normes, etc. : ces fonctionnalités sont conçues pour fournir des valeurs par défaut robustes et sûres pour les programmeurs numériquement non avertis, en plus de prendre en charge des bibliothèques numériques sophistiquées par des experts. Le concepteur clé de l'IEEE 754, William Kahan note qu'il est incorrect de ". [considérer] les caractéristiques de la norme IEEE 754 pour l'arithmétique binaire à virgule flottante qui . [sont] pas considérées comme des caractéristiques utilisables par les seuls experts numériques. Les faits sont tout à fait le contraire. En 1977, ces fonctionnalités ont été conçues dans l'Intel 8087 pour servir le marché le plus large possible. L'analyse des erreurs nous dit comment concevoir une arithmétique à virgule flottante, comme la norme IEEE 754, modérément tolérante à l'ignorance bien intentionnée des programmeurs " . [23]

    • Les valeurs spéciales telles que l'infini et NaN garantissent que l'arithmétique à virgule flottante est algébriquement complète : chaque opération à virgule flottante produit un résultat bien défini et ne lancera pas, par défaut, d'interruption ou de déroutement machine. De plus, les choix de valeurs spéciales renvoyés dans des cas exceptionnels ont été conçus pour donner la bonne réponse dans de nombreux cas. Par exemple, selon l'arithmétique IEEE 754, les fractions continues telles que R(z) := 7 − 3/[z − 2 − 1/(z − 7 + 10/[z − 2 − 2/(z − 3)]) ] donnera la bonne réponse sur toutes les entrées, comme le potentiel de division par zéro, par exemple pour z = 3 , est correctement géré en donnant +infinity, et donc de telles exceptions peuvent être ignorées en toute sécurité. [24] Comme l'a noté Kahan, le piège non géré consécutif à un débordement de conversion de virgule flottante en nombre entier de 16 bits qui a causé la perte d'une fusée Ariane 5 ne se serait pas produit avec la politique de virgule flottante IEEE 754 par défaut. [23]
    • Les nombres sous-normaux garantissent que pour fini nombres à virgule flottante x et y, x − y = 0 si et seulement si x = y, comme prévu, mais qui ne s'appliquaient pas aux représentations à virgule flottante antérieures. [13]
    • Sur la logique de conception du format x87 80 bits, Kahan note : « Ce format étendu est conçu pour être utilisé, avec une perte de vitesse négligeable, pour tout sauf le plus simple arithmétique avec float et double opérandes. Par exemple, il devrait être utilisé pour les variables scratch dans les boucles qui implémentent des récurrences comme l'évaluation polynomiale, les produits scalaires, les fractions partielles et continues. Cela évite souvent un débordement/débordement excessif prématuré ou une annulation locale sévère qui peut gâcher des algorithmes simples".[25] Le calcul des résultats intermédiaires dans un format étendu avec une précision élevée et un exposant étendu a des précédents dans la pratique historique du calcul scientifique et dans la conception de calculatrices scientifiques, par ex. Les calculatrices financières de Hewlett-Packard exécutaient des fonctions arithmétiques et financières avec trois décimales plus importantes qu'elles n'en stockaient ou n'affichaient. [25] La mise en œuvre de la précision étendue a permis de développer facilement des bibliothèques de fonctions élémentaires standard qui donnaient normalement des résultats en double précision dans une unité à la dernière place (ULP) à grande vitesse.
    • Un arrondi correct des valeurs à la valeur représentable la plus proche évite les biais systématiques dans les calculs et ralentit la croissance des erreurs. Arrondir les liens à supprime même le biais statistique qui peut se produire lors de l'ajout de chiffres similaires.
    • L'arrondi dirigé a été conçu comme une aide à la vérification des limites d'erreur, par exemple dans l'arithmétique d'intervalle. Il est également utilisé dans la mise en œuvre de certaines fonctions.
    • La base mathématique des opérations, en particulier l'arrondi correct, permet de prouver des propriétés mathématiques et de concevoir des algorithmes à virgule flottante tels que 2Sum, Fast2Sum et l'algorithme de sommation de Kahan, par ex. pour améliorer la précision ou mettre en œuvre des sous-programmes arithmétiques à précision multiple relativement facilement.

    Une propriété des formats simple et double précision est que leur encodage permet de les trier facilement sans utiliser de matériel à virgule flottante. Leurs bits interprétés comme un entier de complément à deux trient déjà correctement les positifs, les négatifs étant inversés. Avec un xor pour inverser le bit de signe pour les valeurs positives et tous les bits pour les valeurs négatives, toutes les valeurs deviennent triables en tant qu'entiers non signés (avec −0 < +0 ). [26] Il n'est pas clair si cette propriété est destinée.

    En plus des formats standard IEEE 754 largement utilisés, d'autres formats à virgule flottante sont utilisés, ou ont été utilisés, dans certains domaines spécifiques à un domaine.

    • Le Microsoft Binary Format (MBF) a été développé pour les produits de langage Microsoft BASIC, y compris le tout premier produit de Microsoft Altair BASIC (1975), TRS-80 LEVEL II, CP/M's MBASIC, IBM PC 5150's BASICA, MS-DOS's GW-BASIC et QuickBASIC avant la version 4.00. QuickBASIC version 4.00 et 4.50 est passé au format IEEE 754-1985 mais peut revenir au format MBF à l'aide de l'option de commande /MBF. MBF a été conçu et développé sur un Intel 8080 simulé par Monte Davidoff, un compagnon de Bill Gates, au printemps 1975 pour le MITS Altair 8800. La version initiale de juillet 1975 supportait un format simple précision (32 bits) en raison du coût de la mémoire MITS Altair 8800 de 4 kilo-octets. En décembre 1975, la version 8 kilo-octets ajoute un format double précision (64 bits). Une variante de format simple précision (40 bits) a été adoptée pour d'autres processeurs, notamment le MOS 6502 (Apple //, Commodore PET, Atari), le Motorola 6800 (MITS Altair 680) et le Motorola 6809 (TRS-80 Color Computer). Tous les produits linguistiques Microsoft de 1975 à 1987 ont utilisé le format binaire Microsoft jusqu'à ce que Microsoft adopte le format standard IEEE-754 dans tous ses produits à partir de 1988 jusqu'à leurs versions actuelles. MBF se compose du format MBF simple précision (32 bits, "6-digit BASIC"), [27][28] le format MBF de précision étendue (40 bits, "9-digit BASIC"), [28] et le Format MBF double précision (64 bits) [27][29] chacun d'eux est représenté par un exposant de 8 bits, suivi d'un bit de signe, suivi d'une mantisse de respectivement 23, 31 et 55 bits.
    • Le format Bfloat16 nécessite la même quantité de mémoire (16 bits) que le format demi-précision IEEE 754, mais alloue 8 bits à l'exposant au lieu de 5, offrant ainsi la même plage qu'un nombre simple précision IEEE 754. Le compromis est une précision réduite, car le champ de significande de fin est réduit de 10 à 7 bits. Ce format est principalement utilisé dans la formation de modèles d'apprentissage automatique, où la portée est plus précieuse que la précision. De nombreux accélérateurs d'apprentissage automatique fournissent une prise en charge matérielle de ce format.
    • Le format TensorFloat-32 [30] fournit le meilleur des formats Bfloat16 et demi-précision, avec 8 bits d'exposant comme premier et 10 bits de champ de significande de fin comme dernier. Ce format a été introduit par Nvidia, qui le prend en charge matériellement dans les cœurs Tensor de ses GPU basés sur l'architecture Nvidia Ampere. L'inconvénient de ce format est sa taille totale de 19 bits, ce qui n'est pas une puissance de 2. Cependant, selon Nvidia, ce format ne devrait être utilisé en interne par le matériel que pour accélérer les calculs, tandis que les entrées et sorties devraient être stockées dans le Format IEEE 754 simple précision 32 bits. [30]

    De par leur nature, tous les nombres exprimés au format à virgule flottante sont des nombres rationnels avec un développement final dans la base concernée (par exemple, un développement décimal final en base 10 ou un développement binaire final en base 2). Les nombres irrationnels, tels que π ou √2, ou les nombres rationnels non terminés, doivent être approximés. Le nombre de chiffres (ou bits) de précision limite également l'ensemble des nombres rationnels qui peuvent être représentés exactement. Par exemple, le nombre décimal 123456789 ne peut pas être exactement représenté si seulement huit chiffres décimaux de précision sont disponibles (serait arrondi à 123456790 ou 123456780 où le chiffre le plus à droite 0 n'est pas explicitement représenté), la même chose s'applique aux chiffres sans fin (. 5 à arrondir à .55555555 ou .55555556).

    Lorsqu'un nombre est représenté dans un format (comme une chaîne de caractères) qui n'est pas une représentation à virgule flottante native prise en charge dans une implémentation informatique, il nécessitera une conversion avant de pouvoir être utilisé dans cette implémentation. Si le nombre peut être représenté exactement au format à virgule flottante, la conversion est exacte. S'il n'y a pas de représentation exacte, la conversion nécessite le choix du nombre à virgule flottante à utiliser pour représenter la valeur d'origine. La représentation choisie aura une valeur différente de l'originale, et la valeur ainsi ajustée est appelée la valeur arrondie.

    Le fait qu'un nombre rationnel ait ou non un développement terminal dépend de la base. Par exemple, en base 10, le nombre 1/2 a une expansion terminale (0,5) alors que le nombre 1/3 n'en a pas (0,333. ). En base 2, seuls les rationnels dont les dénominateurs sont des puissances de 2 (comme 1/2 ou 3/16) se terminent. Tout rationnel avec un dénominateur qui a un facteur premier autre que 2 aura un développement binaire infini. Cela signifie que les nombres qui semblent courts et exacts lorsqu'ils sont écrits au format décimal peuvent nécessiter une approximation lorsqu'ils sont convertis en virgule flottante binaire. Par exemple, le nombre décimal 0,1 n'est pas représentable en virgule flottante binaire de précision finie, la représentation binaire exacte aurait une séquence "1100" se poursuivant sans fin :

    e = −4 s = 1100110011001100110011001100110011.

    où, comme précédemment, s est la mantisse et e est l'exposant.

    Arrondi à 24 bits, cela devient

    e = −4 s = 110011001100110011001101,

    qui est en fait 0,100000001490116119384765625 en décimal.

    Comme autre exemple, le nombre réel , représenté en binaire comme une séquence infinie de bits est

    lorsqu'il est approximé en arrondissant à une précision de 24 bits.

    En virgule flottante simple précision binaire, ceci est représenté par s = 1.10010010000111111011011 avec e = 1. Cela a une valeur décimale de

    3.1415927410125732421875,

    alors qu'une approximation plus précise de la vraie valeur de est

    3.14159265358979323846264338327950.

    Le résultat de l'arrondi diffère de la valeur réelle d'environ 0,03 partie par million et correspond à la représentation décimale de dans les 7 premiers chiffres. La différence est l'erreur de discrétisation et est limitée par l'epsilon de la machine.

    La différence arithmétique entre deux nombres à virgule flottante représentables consécutifs qui ont le même exposant est appelée unité à la dernière place (ULP). Par exemple, s'il n'y a pas de nombre représentable entre les nombres représentables 1.45a70c22hexagone et 1.45a70c24hexagone, l'ULP est de 2×16 -8 , soit 2 -31 . Pour les nombres avec une partie d'exposant en base 2 de 0, c'est-à-dire des nombres avec une valeur absolue supérieure ou égale à 1 mais inférieure à 2, un ULP est exactement 2 −23 ou environ 10 −7 en simple précision, et exactement 2 −53 soit environ 10 -16 en double précision. Le comportement obligatoire du matériel conforme IEEE est que le résultat se situe dans la moitié d'un ULP.

    Modes d'arrondi Modifier

    L'arrondi est utilisé lorsque le résultat exact d'une opération à virgule flottante (ou d'une conversion au format à virgule flottante) nécessiterait plus de chiffres qu'il n'y en a dans la mantisse. IEEE 754 requiert arrondir correctement: c'est-à-dire que le résultat arrondi est comme si une arithmétique infiniment précise était utilisée pour calculer la valeur, puis arrondie (bien que dans l'implémentation, seuls trois bits supplémentaires soient nécessaires pour garantir cela). Il existe plusieurs schémas d'arrondi (ou modes d'arrondi). Historiquement, la troncature était l'approche typique. Depuis l'introduction de l'IEEE 754, la méthode par défaut (arrondir au plus proche, se rattache au pair, parfois appelé arrondi bancaire) est plus couramment utilisé. Cette méthode arrondit le résultat idéal (infiniment précis) d'une opération arithmétique à la valeur représentable la plus proche et donne cette représentation comme résultat. [nb 8] En cas d'égalité, on choisit la valeur qui ferait que la mantisse se termine par un chiffre pair. La norme IEEE 754 exige que le même arrondi soit appliqué à toutes les opérations algébriques fondamentales, y compris la racine carrée et les conversions, lorsqu'il existe un résultat numérique (non NaN). Cela signifie que les résultats des opérations IEEE 754 sont complètement déterminés dans tous les bits du résultat, à l'exception de la représentation des NaN. (Les fonctions "Bibliothèque" telles que le cosinus et le journal ne sont pas obligatoires.)

    D'autres options d'arrondi sont également disponibles. IEEE 754 spécifie les modes d'arrondi suivants :

    • arrondir au plus proche, où les liens arrondissent au chiffre pair le plus proche dans la position requise (le mode par défaut et de loin le plus courant)
    • arrondir au plus proche, où les liens arrondissent à partir de zéro (facultatif pour la virgule flottante binaire et couramment utilisé en décimal)
    • arrondir au supérieur (vers +∞ résultats négatifs donc arrondir vers zéro)
    • arrondir à l'inférieur (vers −∞ les résultats négatifs donc arrondir à zéro)
    • arrondir vers zéro (la troncature est similaire au comportement courant des conversions de nombres flottants en nombres entiers, qui convertissent -3,9 en -3 et 3,9 en 3)

    Les modes alternatifs sont utiles lorsque la quantité d'erreur introduite doit être limitée. Les applications qui nécessitent une erreur bornée sont la virgule flottante multi-précision et l'arithmétique d'intervalle. Les modes d'arrondi alternatifs sont également utiles pour diagnostiquer l'instabilité numérique : si les résultats d'un sous-programme varient considérablement entre l'arrondi à + et - l'infini, alors il est probablement numériquement instable et affecté par une erreur d'arrondi. [31]

    Conversion binaire-décimale avec un nombre minimal de chiffres Modifier

    La conversion d'un nombre à virgule flottante binaire double précision en une chaîne décimale est une opération courante, mais un algorithme produisant des résultats à la fois précis et minimaux n'est apparu sur papier qu'en 1990, avec Dragon4 de Steele et White. Certaines des améliorations depuis lors incluent :

    • David M. Gay's dtoa.c, une implémentation open source pratique de nombreuses idées dans Dragon4. [32]
    • Grisu3, avec une accélération 4× car il supprime l'utilisation de bignums. Doit être utilisé avec un secours, car il échoue pour

    De nombreux runtimes en langage moderne utilisent Grisu3 avec un repli Dragon4. [36]

    Conversion décimal en binaire Modifier

    Le problème de l'analyse d'une chaîne décimale dans une représentation binaire FP est complexe, avec un analyseur précis n'apparaissant pas avant le travail de Clinger en 1990 (implémenté dans dtoa.c). [32] D'autres travaux ont également progressé dans le sens d'une analyse syntaxique plus rapide. [37]

    Pour faciliter la présentation et la compréhension, la base décimale avec une précision de 7 chiffres sera utilisée dans les exemples, comme dans l'IEEE 754 décimal32 format. Les principes fondamentaux sont les mêmes dans n'importe quelle base ou précision, sauf que la normalisation est facultative (elle n'affecte pas la valeur numérique du résultat). Ici, s désigne la mantisse et e désigne l'exposant.

    Addition et soustraction Modifier

    Une méthode simple pour ajouter des nombres à virgule flottante consiste d'abord à les représenter avec le même exposant. Dans l'exemple ci-dessous, le deuxième nombre est décalé de trois chiffres vers la droite, et on procède ensuite avec la méthode d'addition habituelle :

    C'est le vrai résultat, la somme exacte des opérandes. Il sera arrondi à sept chiffres puis normalisé si nécessaire. Le résultat final est

    Les trois chiffres les plus bas du deuxième opérande (654) sont essentiellement perdus. Il s'agit d'une erreur d'arrondi. Dans les cas extrêmes, la somme de deux nombres non nuls peut être égale à l'un d'eux :

    Dans les exemples conceptuels ci-dessus, il semblerait qu'un grand nombre de chiffres supplémentaires devraient être fournis par l'additionneur pour assurer un arrondi correct. garder peu, un arrondir peu et un extra collant bit doit être porté au-delà de la précision des opérandes. [22] [38] : 218–220

    Un autre problème de perte d'importance survient lorsque approximations à deux nombres presque égaux sont soustraits. Dans l'exemple suivant e = 5 s = 1,234571 et e = 5 s = 1,234567 sont des approximations des rationnels 123457.1467 et 123456.659.

    La différence à virgule flottante est calculée exactement parce que les nombres sont proches - le lemme de Sterbenz le garantit, même en cas de dépassement inférieur lorsque le dépassement progressif est pris en charge. Malgré cela, la différence des nombres originaux est e = −1 s = 4.877000, qui diffère de plus de 20% de la différence e = −1 s = 4.000.000 des approximations. Dans les cas extrêmes, tous les chiffres significatifs de précision peuvent être perdus. [22] [39] Cette annulation illustre le danger de supposer que tous les chiffres d'un résultat calculé sont significatifs. Traiter les conséquences de ces erreurs est un sujet en analyse numérique voir aussi Problèmes de précision.

    Multiplication et division Modifier

    Pour multiplier, les significands sont multipliés tandis que les exposants sont ajoutés, et le résultat est arrondi et normalisé.

    De même, la division est accomplie en soustrayant l'exposant du diviseur de l'exposant du dividende et en divisant la mantisse du dividende par la mantisse du diviseur.

    Il n'y a pas de problèmes d'annulation ou d'absorption avec la multiplication ou la division, bien que de petites erreurs puissent s'accumuler au fur et à mesure que les opérations sont exécutées en succession. [22] En pratique, la manière dont ces opérations sont effectuées en logique numérique peut être assez complexe (voir algorithme de multiplication et algorithme de division de Booth). [nb 9] Pour une méthode simple et rapide, voir la méthode Horner.

    Le calcul en virgule flottante dans un ordinateur peut se heurter à trois types de problèmes :

    • Une opération peut être mathématiquement indéfinie, telle que ∞/∞, ou division par zéro.
    • Une opération peut être légale en principe, mais pas prise en charge par le format spécifique, par exemple, le calcul de la racine carrée de -1 ou du sinus inverse de 2 (qui donnent tous deux des nombres complexes).
    • Une opération peut être légale en principe, mais le résultat peut être impossible à représenter dans le format spécifié, car l'exposant est trop grand ou trop petit pour être encodé dans le champ exposant. Un tel événement est appelé débordement (exposant trop grand), sous-débordement (exposant trop petit) ou dénormalisation (perte de précision).

    Avant la norme IEEE, de telles conditions provoquaient généralement l'arrêt du programme ou déclenchaient une sorte de piège que le programmeur pouvait éventuellement détecter. La façon dont cela fonctionnait dépendait du système, ce qui signifie que les programmes à virgule flottante n'étaient pas portables. (Le terme "exception" tel qu'utilisé dans IEEE 754 est un terme général signifiant une condition exceptionnelle, qui n'est pas nécessairement une erreur, et est un usage différent de celui généralement défini dans les langages de programmation tels que C++ ou Java, dans lesquels un " exception" est un flux de contrôle alternatif, plus proche de ce que l'on appelle un "trap" dans la terminologie IEEE 754.)

    Ici, la méthode par défaut requise de gestion des exceptions selon IEEE 754 est discutée (le piégeage facultatif IEEE 754 et d'autres modes de "gestion alternative des exceptions" ne sont pas discutés). Les exceptions arithmétiques doivent (par défaut) être enregistrées dans des bits d'indicateur d'état « persistants ». Qu'ils soient "collants" signifie qu'ils ne sont pas réinitialisés par la prochaine opération (arithmétique), mais restent définis jusqu'à ce qu'ils soient explicitement réinitialisés. L'utilisation de drapeaux "collants" permet ainsi de retarder le test des conditions exceptionnelles jusqu'après une expression ou un sous-programme à virgule flottante complet : sans eux, des conditions exceptionnelles qui ne pourraient pas être ignorées autrement nécessiteraient un test explicite immédiatement après chaque opération à virgule flottante. Par défaut, une opération renvoie toujours un résultat conforme aux spécifications sans interrompre le calcul. Par exemple, 1/0 renvoie +∞, tout en définissant également le bit indicateur de division par zéro (cette valeur par défaut de ∞ est conçue pour renvoyer souvent un résultat fini lorsqu'elle est utilisée dans des opérations ultérieures et donc être ignorée en toute sécurité).

    Cependant, la norme IEEE 754 d'origine n'a pas recommandé d'opérations pour gérer de tels ensembles de bits d'indicateur d'exception arithmétique. Ainsi, bien que ceux-ci aient été implémentés dans le matériel, les implémentations de langage de programmation initialement ne fournissaient généralement pas de moyen d'y accéder (à part l'assembleur). Au fil du temps, certaines normes de langage de programmation (par exemple, C99/C11 et Fortran) ont été mises à jour pour spécifier les méthodes d'accès et de modification des bits d'indicateur d'état. La version 2008 de la norme IEEE 754 spécifie maintenant quelques opérations pour accéder et gérer les bits de drapeau arithmétique. Le modèle de programmation est basé sur un seul thread d'exécution et leur utilisation par plusieurs threads doit être gérée par un moyen en dehors de la norme (par exemple, C11 spécifie que les drapeaux ont un stockage local de thread).

    IEEE 754 spécifie cinq exceptions arithmétiques qui doivent être enregistrées dans les indicateurs d'état ("sticky bits") :

    • inexact, défini si la valeur arrondie (et renvoyée) est différente du résultat mathématiquement exact de l'opération.
    • débordement, défini si la valeur arrondie est minuscule (comme spécifié dans IEEE 754) et inexact (ou peut-être limité à s'il a une perte de dénormalisation, selon la version 1984 de IEEE 754), renvoyant une valeur sous-normale, y compris les zéros.
    • débordement, défini si la valeur absolue de la valeur arrondie est trop grande pour être représentée. Une valeur finie infinie ou maximale est renvoyée, selon l'arrondi utilisé.
    • diviser par zéro, défini si le résultat est infini étant donné les opérandes finis, renvoyant une infinité, soit +∞ soit −∞.
    • invalide, défini si un résultat à valeur réelle ne peut pas être renvoyé, par ex. sqrt(−1) ou 0/0, renvoyant un NaN silencieux.

    La valeur de retour par défaut pour chacune des exceptions est conçue pour donner le résultat correct dans la majorité des cas, de sorte que les exceptions peuvent être ignorées dans la majorité des codes. inexact renvoie un résultat correctement arrondi, et débordement renvoie une petite valeur dénormalisée et peut donc presque toujours être ignorée. [40] diviser par zéro renvoie l'infini exactement, ce qui divisera généralement un nombre fini et donnera ainsi zéro, ou bien donnera un invalide exception par la suite si ce n'est pas le cas, et peut donc aussi généralement être ignoré. Par exemple, la résistance effective de n résistances en parallèle (voir fig. 1) est donnée par R tot = 1 / ( 1 / R 1 + 1 / R 2 + ⋯ + 1 / R n ) >=1/(1/R_<1>+1/R_<2>+cdots +1/R_)> . Si un court-circuit se développe avec R 1 > mis à 0, 1 / R 1 > retournera +infini ce qui donnera un R t o t final > de 0, comme prévu [41] (voir l'exemple de fraction continue de la logique de conception IEEE 754 pour un autre exemple).

    Débordement et invalide les exceptions ne peuvent généralement pas être ignorées, mais ne représentent pas nécessairement des erreurs : par exemple, une routine de recherche de racine, dans le cadre de son fonctionnement normal, peut évaluer une fonction transmise à des valeurs en dehors de son domaine, renvoyant NaN et un invalide indicateur d'exception à ignorer jusqu'à ce qu'il trouve un point de départ utile. [40]

    Le fait que les nombres à virgule flottante ne puissent pas représenter avec précision tous les nombres réels, et que les opérations à virgule flottante ne puissent pas représenter avec précision les vraies opérations arithmétiques, conduit à de nombreuses situations surprenantes. Ceci est lié à la précision finie avec laquelle les ordinateurs représentent généralement des nombres.

    Par exemple, la non-représentabilité de 0,1 et 0,01 (en binaire) signifie que le résultat de la tentative de carré 0,1 n'est ni 0,01 ni le nombre représentable le plus proche. Dans la représentation 24 bits (simple précision), 0,1 (décimal) était donné précédemment comme e = −4 s = 110011001100110011001101, qui est

    La quadrature de ce nombre donne

    La quadrature avec du matériel à virgule flottante simple précision (avec arrondi) donne

    Mais le nombre représentable le plus proche de 0,01 est

    De plus, la non-représentabilité de π (et π/2) signifie qu'une tentative de calcul de tan(π/2) ne donnera pas un résultat infini, ni même débordera dans les formats à virgule flottante habituels (en supposant une précision mise en œuvre du bronzage). Il n'est tout simplement pas possible pour le matériel à virgule flottante standard de tenter de calculer tan(π/2), car π/2 ne peut pas être représenté exactement. Ce calcul en C :

    donnera un résultat de 16331239353195370.0. En simple précision (en utilisant la fonction tanf), le résultat sera −22877332.0.

    De même, une tentative de calcul de sin(π) ne donnera pas zéro. Le résultat sera (environ) 0,1225 × 10 − 15 en double précision, ou -0,8742 × 10 − 7 en simple précision. [nb 10]

    Alors que l'addition et la multiplication à virgule flottante sont toutes deux commutatives (une + b = b + une et une × b = b × une), ils ne sont pas nécessairement associatifs. C'est-à-dire, (une + b) + c n'est pas nécessairement égal à une + (b + c). En utilisant l'arithmétique décimale et significative à 7 chiffres :

    Ils ne sont pas non plus nécessairement distributifs. C'est-à-dire, (une + b) × c peut ne pas être le même que une × c + b × c:

    En plus de la perte de signification, de l'incapacité à représenter exactement des nombres tels que π et 0,1 et d'autres légères inexactitudes, les phénomènes suivants peuvent se produire :

      : la soustraction d'opérandes presque égaux peut entraîner une perte extrême de précision. [42][39] Lorsque nous soustrayons deux nombres presque égaux, nous mettons les chiffres les plus significatifs à zéro, ne nous laissant que les chiffres insignifiants et les plus erronés. [4] : 124 Par exemple, lors de la détermination d'une dérivée d'une fonction, la formule suivante est utilisée :
    • Les conversions en entier ne sont pas intuitives : la conversion (63,0/9,0) en entier donne 7, mais la conversion (0,63/0,09) peut donner 6. En effet, les conversions sont généralement tronquées plutôt qu'arrondies. Les fonctions de plancher et de plafond peuvent produire des réponses qui sont décalées de un par rapport à la valeur attendue intuitivement.
    • Plage d'exposant limitée : les résultats peuvent déborder et donner l'infini, ou sous-dépasser un nombre inférieur à la normale ou zéro. Dans ces cas, la précision sera perdue.
    • Le test de division sûre est problématique : vérifier que le diviseur n'est pas nul ne garantit pas qu'une division ne débordera pas.
    • Tester l'égalité est problématique. Deux séquences de calcul qui sont mathématiquement égales peuvent très bien produire des valeurs à virgule flottante différentes. [43]

    Incidents Modifier

    • Le 25 février 1991, une perte d'importance dans une batterie de missiles MIM-104 Patriot l'a empêchée d'intercepter un missile Scud entrant à Dhahran, en Arabie saoudite, contribuant à la mort de 28 soldats du 14e détachement de quartier-maître de l'armée américaine. [44]

    Précision de la machine et analyse des erreurs en amont Modifier

    Précision des machines est une quantité qui caractérise la précision d'un système à virgule flottante, et est utilisée dans l'analyse d'erreur en amont des algorithmes à virgule flottante. Il est également connu sous le nom d'arrondi d'unité ou machine epsilon. Généralement notémach, sa valeur dépend de l'arrondi particulier utilisé.

    en arrondissant au plus près,

    Ceci est important car il délimite le erreur relative en représentant tout nombre réel non nul x dans la plage normalisée d'un système à virgule flottante :

    L'analyse d'erreur en amont, dont la théorie a été développée et popularisée par James H. Wilkinson, peut être utilisée pour établir qu'un algorithme implémentant une fonction numérique est numériquement stable. [45] L'approche de base est de montrer que bien que le résultat calculé, en raison d'erreurs d'arrondi, ne soit pas exactement correct, c'est la solution exacte à un problème voisin avec des données d'entrée légèrement perturbées. Si la perturbation requise est faible, de l'ordre de l'incertitude dans les données d'entrée, alors les résultats sont dans un certain sens aussi précis que les données « méritent ». L'algorithme est alors défini comme stable en arrière. La stabilité est une mesure de la sensibilité aux erreurs d'arrondi d'une procédure numérique donnée en revanche, le numéro de condition d'une fonction pour un problème donné indique la sensibilité inhérente de la fonction à de petites perturbations dans son entrée et est indépendant de la mise en œuvre utilisée pour résoudre le problème. [46]

    Comme exemple trivial, considérons une expression simple donnant le produit interne de (longueur deux) vecteurs x et y , puis

    par définition, qui est la somme de deux légèrement perturbés (de l'ordre de Εmach) les données d'entrée, et est donc stable en amont. Pour des exemples plus réalistes en algèbre linéaire numérique, voir Higham 2002 [47] et d'autres références ci-dessous.

    Minimiser l'effet des problèmes de précision Modifier

    Bien que, comme indiqué précédemment, les opérations arithmétiques individuelles de l'IEEE 754 soient garanties avec une précision d'un demi-ULP près, des formules plus compliquées peuvent souffrir d'erreurs plus importantes en raison des arrondis. La perte de précision peut être substantielle si un problème ou ses données sont mal conditionnés, ce qui signifie que le résultat correct est hypersensible à de minuscules perturbations dans ses données. Cependant, même les fonctions bien conditionnées peuvent souffrir d'une grande perte de précision si un algorithme numériquement instable pour ces données est utilisé : des formulations d'expressions apparemment équivalentes dans un langage de programmation peuvent différer sensiblement dans leur stabilité numérique. Une approche pour éliminer le risque d'une telle perte de précision est la conception et l'analyse d'algorithmes numériquement stables, ce qui est un objectif de la branche des mathématiques connue sous le nom d'analyse numérique. Une autre approche qui peut protéger contre le risque d'instabilités numériques est le calcul de valeurs intermédiaires (scratch) dans un algorithme avec une précision supérieure à celle requise par le résultat final, [48] qui peut supprimer ou réduire par ordre de grandeur, [49] un tel risque : la précision quadruple et la précision étendue IEEE 754 sont conçues à cet effet lors du calcul en double précision. [50] [n° 11]

    Par exemple, l'algorithme suivant est une implémentation directe pour calculer la fonction A(x) = (x−1) / (exp(x−1) − 1) qui est bien conditionnée à 1.0, [nb 12] cependant il peut être montré numériquement instable et perdre jusqu'à la moitié des chiffres significatifs portés par l'arithmétique lorsqu'il est calculé près de 1,0. [23]

    Si, cependant, les calculs intermédiaires sont tous effectués avec une précision étendue (par exemple en définissant la ligne [1] sur C99 long double), alors une précision maximale dans le résultat double final peut être maintenue. [nb 13] Alternativement, une analyse numérique de l'algorithme révèle que si le changement non évident suivant à la ligne [2] est effectué :

    alors l'algorithme devient numériquement stable et peut calculer avec une double précision complète.

    Pour conserver les propriétés de ces programmes numériquement stables soigneusement construits, une manipulation soigneuse de la part du compilateur est requise. Certaines « optimisations » que les compilateurs peuvent effectuer (par exemple, les opérations de réorganisation) peuvent aller à l’encontre des objectifs d’un logiciel bien comporté. Il existe une certaine controverse sur les défaillances des compilateurs et des conceptions de langage dans ce domaine : C99 est un exemple de langage où de telles optimisations sont soigneusement spécifiées pour maintenir la précision numérique. Voir les références externes au bas de cet article.

    Un traitement détaillé des techniques d'écriture de logiciels à virgule flottante de haute qualité dépasse le cadre de cet article, et le lecteur est renvoyé à [47] [51] et aux autres références au bas de cet article. Kahan suggère plusieurs règles empiriques qui peuvent réduire considérablement par des ordres de grandeur [51] le risque d'anomalies numériques, en plus ou à la place d'une analyse numérique plus minutieuse. Celles-ci incluent : ou en double précision étendue ou quadruple pour des résultats allant jusqu'à double précision [24] ) et en arrondissant les données d'entrée et les résultats à la seule précision requise et prise en charge par les données d'entrée (avec une précision excessive dans le résultat final au-delà de celle requise et prise en charge par le les données d'entrée peuvent être trompeuses, augmentent le coût de stockage et diminuent la vitesse, et les bits en excès peuvent affecter la convergence des procédures numériques : [52] notamment, la première forme de l'exemple itératif donné ci-dessous converge correctement en utilisant cette règle empirique). De brèves descriptions de plusieurs problèmes et techniques supplémentaires suivent.

    Comme les fractions décimales ne peuvent souvent pas être exactement représentées en virgule flottante binaire, une telle arithmétique est à son meilleur lorsqu'elle est simplement utilisée pour mesurer des quantités du monde réel sur une large gamme d'échelles (comme la période orbitale d'une lune autour de Saturne ou la masse d'un proton), et au pire lorsqu'on s'attend à modéliser les interactions de quantités exprimées sous forme de chaînes décimales qui sont censées être exactes. [49] [51] Un exemple de ce dernier cas est celui des calculs financiers. Pour cette raison, les logiciels financiers ont tendance à ne pas utiliser une représentation binaire à virgule flottante. [53] Le type de données "décimal" des langages de programmation C# et Python, et les formats décimaux de la norme IEEE 754-2008, sont conçus pour éviter les problèmes de représentations binaires à virgule flottante lorsqu'ils sont appliqués à des valeurs décimales exactes saisies par l'homme , et faire en sorte que l'arithmétique se comporte toujours comme prévu lorsque les nombres sont imprimés en décimal.

    L'utilisation du test d'égalité ( if (x==y) . ) nécessite de la prudence lorsqu'il s'agit de nombres à virgule flottante. Même des expressions simples comme 0.6/0.2-3==0, sur la plupart des ordinateurs, ne seront pas vraies [54] (dans IEEE 754 double précision, par exemple, 0.6/0.2-3 est approximativement égal à -4.44089209850063e-16) . Par conséquent, ces tests sont parfois remplacés par des comparaisons "floues" ( if (abs(x-y) < epsilon) . , où epsilon est suffisamment petit et adapté à l'application, comme 1.0E-13). La sagesse de le faire varie considérablement et peut nécessiter une analyse numérique pour lier epsilon. [47] Les valeurs dérivées de la représentation des données primaires et de leurs comparaisons doivent être effectuées avec une précision plus large et étendue afin de minimiser le risque de telles incohérences dues à des erreurs d'arrondi. [51] Il est souvent préférable d'organiser le code de manière à ce que de tels tests soient inutiles. Par exemple, en géométrie computationnelle, des tests exacts pour savoir si un point se trouve au large ou sur une ligne ou un plan défini par d'autres points peuvent être effectués à l'aide de méthodes de précision adaptative ou d'arithmétique exacte. [55]

    De petites erreurs dans l'arithmétique à virgule flottante peuvent augmenter lorsque les algorithmes mathématiques effectuent des opérations un nombre énorme de fois. Quelques exemples sont l'inversion de matrice, le calcul de vecteurs propres et la résolution d'équations différentielles. Ces algorithmes doivent être très soigneusement conçus, en utilisant des approches numériques telles que le raffinement itératif, s'ils veulent bien fonctionner. [56]

    La sommation d'un vecteur de valeurs à virgule flottante est un algorithme de base en calcul scientifique, et il est donc essentiel de savoir quand une perte de signification peut se produire. Par exemple, si l'on additionne un très grand nombre de nombres, les additions individuelles sont très petites par rapport à la somme. Cela peut entraîner une perte de sens. Un ajout typique serait alors quelque chose comme

    Les 3 chiffres inférieurs des additifs sont effectivement perdus. Supposons, par exemple, que l'on doive ajouter de nombreux nombres, tous approximativement égaux à 3. Après que 1000 d'entre eux aient été ajoutés, la somme cumulée est d'environ 3000, les chiffres perdus ne sont pas récupérés. L'algorithme de sommation de Kahan peut être utilisé pour réduire les erreurs. [47]

    L'erreur d'arrondi peut affecter la convergence et la précision des procédures numériques itératives. A titre d'exemple, Archimède a approximé π en calculant les périmètres de polygones inscrivant et circonscrivant un cercle, en commençant par des hexagones, et en doublant successivement le nombre de côtés. Comme indiqué ci-dessus, les calculs peuvent être réorganisés d'une manière mathématiquement équivalente mais moins sujette aux erreurs (analyse numérique). Deux formes de la formule de récurrence pour le polygone circonscrit sont [ citation requise ] :

    Voici un calcul utilisant l'arithmétique IEEE "double" (une mantisse avec 53 bits de précision) :

    Alors que les deux formes de la formule de récurrence sont clairement mathématiquement équivalentes, [nb 14] la première soustrait 1 à un nombre extrêmement proche de 1, conduisant à une perte de plus en plus problématique des chiffres significatifs. Comme la récurrence est appliquée à plusieurs reprises, la précision s'améliore d'abord, mais elle se détériore ensuite. Il ne dépasse jamais environ 8 chiffres, même si l'arithmétique à 53 bits devrait être capable d'une précision d'environ 16 chiffres. Lorsque la deuxième forme de récurrence est utilisée, la valeur converge vers 15 chiffres de précision.