INFO : Comment Windows gère les calculs en virgule flottante

Traductions disponibles Traductions disponibles
Numéro d'article: 102555 - Voir les produits auxquels s'applique cet article
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Agrandir tout | Réduire tout

Sommaire

Résumé

Toutes les plateformes Microsoft Windows fournissent des applications Win32 un environnement commun à virgule flottante, mais ils diffèrent dans leur prise en charge de pilotes de périphériques et dans leur prise en charge pour les applications Win16, POSIX (Portable Operating System Interface), MS-DOS et basées sur OS/2.

Cet article explique comment chacune de ces plates-formes offre une prise en charge à virgule flottante à des applications et aux pilotes de périphériques.

Plus d'informations

Cette section décrit tout d'abord la fonctionnalité à virgule flottante de Windows NT, Windows 2000 et ses successeurs et il décrit ensuite les mêmes dans Windows 95, Windows 98, Windows 98 Deuxième Édition et les systèmes Windows Millennium Edition (Me). Membres de chaque groupe fournissent une prise en charge à virgule flottante similaire à l'autre, mais les deux groupes diffèrent les unes des autres en raison des différences architecturales sous-jacent.

Windows NT et ses successeurs

Les applications Win32

Chaque thread dans une application Win32 a son propre état de l'exécution qui inclut les registres à usage général et les registres à virgule flottante. Par conséquent, l'exécution en virgule flottante et la gestion des exceptions sont contrôlées sur une base par thread. Ceci permet à des threads individuels dans un processus pour ajuster le comportement du processeur en virgule flottante à utiliser arrondi spécialisées ou contrôle de la précision et la gestion des exceptions.

Exceptions de virgule flottante sont gérées par le Win32 structuré de gestion des exceptions (SEH) mécanisme intégrée dans le noyau de Win32. Lorsqu'un thread entraîne une exception à virgule flottante, le mécanisme de gestion structurée des exceptions cherche un gestionnaire d'exceptions enregistré par le thread pour gérer l'exception. Si le thread ne gère pas l'exception, le processus qui il appartient est fermé.

Windows NT et ses successeurs fournissent la prise en charge complète à virgule flottante pour les applications Win32, même sur les processeurs Intel x 86 qui n'ont pas de prise en charge à virgule flottante intégrée. Émulation est fournie par le noyau de Win32 pour les ordinateurs qui n'ont pas de virgule flottante. Par conséquent, les compilateurs n'ont pas à fournir leur propres émulation de virgule flottante.

Langues peuvent avoir des bibliothèques d'exécution ou des systèmes de runtime qui fournissent des gestionnaires d'exceptions de calcul en virgule flottante par défaut. Par exemple, la bibliothèque runtime de Microsoft Visual C++ fournit la gestion des exceptions en virgule flottante par défaut et inclut des fonctions telles que _controlfp pour déterminer et en ajustant le matériel en virgule flottante arrondi, contrôle de la précision et comportement de gestion des exceptions.

Applications Win16

Les applications Win16 sont généralement compilées pour que les enregistrements de correction dans leur code de l'objet qui contiennent des instructions en virgule flottante et des appels à l'émulateur à virgule flottante 16 bits, Win87em. Si le processeur de l'ordinateur prend en charge les instructions en virgule flottante, ou si un coprocesseur est présent, le chargeur résout les corrections pour les instructions en virgule flottante et les instructions seront exécutées. Si la virgule flottante n'est pas détectée, le chargeur résout les corrections pour les appels à Win87em et l'émulateur sera exécuté.

Win87em n'intercepte pas les instructions en virgule flottante qui exécutent des applications ; il s'exécute uniquement lorsqu'elle est appelée explicitement. Par conséquent, assurez-vous que les applications Win16 sont compilées pour prendre en charge d'émulation, demander à l'éditeur de liens pour mettre des enregistrements de correction dans le fichier exécutable.

Windows NT sur ces ordinateurs permettent Intel x 86 processeur émulateur code de Windows NT d'exécuter des applications Win16. Windows NT 3.5 et 3.51 de Windows NT comprennent des émulateurs 80286 et 80287 ; Windows NT 4.0 inclut un émulateur i486. Les applications Win16 s'exécutent toujours comme si les coprocessors à virgule flottante Intel sont présents. Par conséquent, Win87em ne fournit pas d'émulation de virgule flottante sur les ordinateurs RISC.

Pilotes de périphériques

Pilotes en mode noyau pour Windows 2000 et ses successeurs peuvent utiliser les instructions en virgule flottante lorsque IRQL est inférieur ou égal au niveau DISPATCH_LEVEL, mais doit conserver explicitement état virgule flottante du processeur afin que le contexte de l'appelant à virgule flottante n'est pas modifié. Fonctions du pilote doivent appeler KeSaveFloatingPointState avant d'effectuer des opérations à virgule flottante et doivent appeler KeRestoreFloatingPointState avant de retourner à l'appelant. Ces fonctions sont documentées dans le Kit de développement pilote (DDK, Driver Development Kit) de Windows 2000.

Pilotes en mode noyau Windows NT 3.51 et 4.0 de Windows ne pouvez pas utiliser les instructions en virgule flottante, dans la mesure où les commutateurs de pile en mode noyau ne conservent pas les registres à virgule flottante. Si un pilote en mode noyau does utiliser n'importe quelle instruction à virgule flottante, cela peut entraîner l'altération de l'état de l'application en mode utilisateur numérique ou une défaillance du système (se bloquer).

Applications MS-DOS

Windows NT et ses successeurs sur Intel x 86 exécutent les applications MS-DOS en mode virtuel 8086 de Intel x 86 processeur. Applications MS-DOS peuvent accéder au matériel en virgule flottante comme ils le feraient dans MS-DOS. Si aucun matériel en virgule flottante n'est présent, aucune émulation n'est fournie pour l'application. Par conséquent, l'application doit fournir sa propre émulation.

Windows NT sur les ordinateurs RISC utilise du code de émulation intégrée Intel x 86. Windows NT 3.5 et 3.51 de Windows NT comprennent des émulateurs 80286 et 80287 ; Windows NT 4.0 inclut un émulateur i486. Les applications MS-DOS s'exécutent toujours comme si les coprocessors à virgule flottante Intel sont présents.

Applications POSIX

Comme avec les applications Win32, les applications POSIX peuvent supposer que la prise en charge complète à virgule flottante toujours existe.

La norme POSIX ne définit pas un moyen pour activer les exceptions de virgule flottante. Par conséquent, les applications POSIX qui utilisent les exceptions de virgule flottante doivent s'appuyer sur les fonctionnalités spécifiques au système. Une application POSIX compilée avec Microsoft Visual C++ peut activer flottantes exceptions à l'aide de la fonction _controlfp. Exceptions de virgule flottante peuvent ensuite être interceptées par SIGFPE ou, si l'application doit faire plus qu'intercepter l'exception, par la fonction fpieee_flt.

Applications de OS/2

Prise en charge à virgule flottante dans ce sous-système correspond à celle de OS/2: si le matériel de point flottant n'est pas installé, l'application OS/2 doit fournir sa propre émulation. Le sous-système OS/2 est pris en charge uniquement sur Intel x 86 versions de Windows NT et ses successeurs.

Windows 95, Windows 98, Windows 98 Deuxième Édition et Windows Millennium Edition

Les applications Win32

Windows 95 par le biais de plates-formes Windows Millennium Edition fournissent la prise en charge à virgule flottante même pour les applications Win32 en tant que les plates-formes Windows NT et Windows 2000.

Applications Win16

Les applications Win16 sont généralement compilées pour inclure les enregistrements de correction dans leur code de l'objet qui contiennent des instructions en virgule flottante et des appels à l'émulateur à virgule flottante 16 bits, Win87em. Si le processeur de l'ordinateur prend en charge les instructions en virgule flottante ou si un coprocesseur est présent, le chargeur résout les corrections pour les instructions en virgule flottante, et ils seront exécutés. Si la virgule flottante n'est pas détectée, le chargeur résout les corrections pour les appels à Win87em et l'émulateur sera exécuté.

Win87em n'intercepte pas les instructions en virgule flottante qui exécutent des applications ; il s'exécute uniquement lorsqu'elle est appelée explicitement. Par conséquent, compiler des applications de Win16 à prennent en charge l'émulation, demander à l'éditeur de liens pour mettre des enregistrements de correction dans le fichier exécutable.

Pilotes de périphériques

Pilotes de périphériques virtuels (VxD) peuvent utiliser des instructions en virgule flottante mais doivent utiliser l'interface de périphérique de coprocesseur mathématique virtuel pour enregistrer et restaurer l'état du coprocesseur à virgule flottante. Le pilote VxD doit également inscrire un gestionnaire d'exceptions pour les exceptions de virgule flottante.

Applications MS-DOS

Windows 95 par le biais de Windows Millennium Edition plates-formes exécuter des applications MS-DOS en mode virtuel 8086 de Intel x 86 processeur. Applications MS-DOS peuvent accéder au matériel en virgule flottante comme ils le feraient dans MS-DOS. Si aucun matériel en virgule flottante n'est présent, aucune émulation n'est fournie pour l'application. Par conséquent, l'application doit fournir sa propre émulation, comme est généralement effectué par la bibliothèque runtime de l'application MS-DOS.

Les produits tiers mentionnés dans cet article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft n'accorde aucune garantie, implicite ou autre, en concernant les performances ou la fiabilité de ces produits.

Propriétés

Numéro d'article: 102555 - Dernière mise à jour: jeudi 27 février 2014 - Version: 2.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Win32 Application Programming Interface sur le système suivant
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Mots-clés : 
kbnosurvey kbarchive kbmt kbfloatpoint kbinfo kbkernbase kbprogramming KB102555 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 102555
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com