Pourquoi les nombres décimaux à virgule flottante ne sont-ils pas accélérés comme les nombres binaires à virgule flottante?

est-ce que cela vaut la peine de l'implémenter dans le matériel? Si oui, pourquoi? Si non, pourquoi pas?


Désolé j'ai pensé qu'il est clair que je parle de nombres décimaux rationnels! Ok quelque chose comme decNumber++ pour C++,décimal.NET... j'Espère que c'est clair maintenant :)

16
demandé sur Jonathan Leffler 2009-09-19 03:27:25

12 réponses

la dernière révision du IEEE 754: 2008 la norme définit effectivement les nombres décimaux de virgule flottante du matériel, en utilisant les représentations indiquées dans le logiciel référencé dans la question. La version précédente de la norme ( IEEE 754: 1985) n'ont pas fourni de nombres décimaux à virgule flottante. La plupart du matériel actuel met en œuvre la norme de 1985 et non la norme de 2008, mais IBM iSeries ordinateurs utilisant Power6 puces

la raison principale est que les DFP-units ont besoin de plus de transistors dans une puce que les BFP-units. La raison est le code BCD pour calculer des nombres décimaux dans un environnement binaire. L'IEEE754-2008 a plusieurs méthodes pour minimiser la surcharge. Il semble que le DPD hxxp: / / en.wikipedia.la méthode org/wiki/Densely_packed_decimal est plus efficace que la méthode BID hxxp://en.wikipedia.méthode org/wiki / Binary_Integer_Decimal.

normalement, vous avez besoin de 4 bits pour couvrir la plage décimale de 0 à 9. Bit le 10 à 15 sont invalides mais encore possible avec BCD. Par conséquent, le DPD compresse 3 * 4=12 bits en 10 bits pour couvrir la gamme de 000 à 999 avec 1024 (10^2)possibilités.

en général, C'est à dire que la BFP est plus rapide que la DFP. Et BFP besoin de moins d'espace sur une puce que DFP.

la question pourquoi IBM a mis en place une unité DFP est très simple répondu: Ils construisent des serveurs pour le marché financier. Si les données représentent de l'argent, elles devraient être fiables.

avec le matériel accéléré arithmétique décimale, certaines erreurs ne accourent pas comme en binaire. 1/5 = 0,2 = > 0,01100110011001100110011001100110... en binaire donc fractions récurrentes pourrait être évitée.

et la fonction overhelming round () dans excel serait inutile anymore: D fonction =1*(0,5-0,4-0,1) wtf!)

espoir qui explique un peu votre question!

5
répondu Charakterlos 2010-01-03 23:49:28

Il y a (un tout petit peu) en une chaîne décimale accélération, mais...

C'est une bonne question. Ma première réaction a été de moins de!--4-->"macro ops ont toujours pas réussi à prouver", mais après réflexion, ce dont vous parlez serait aller beaucoup plus rapidement, si mis en œuvre dans une unité fonctionnelle. Je suppose qu'il s'agit de savoir si ces opérations sont assez faites pour avoir de l'importance. Il y a une histoire assez triste de macro op et d'instructions spécifiques à l'application, et dans en particulier, les anciennes tentatives de formats financiers décimaux ne sont que des bagages hérités maintenant. Par exemple, je doute qu'ils soient utilisés beaucoup, mais chaque PC a l'Intel BCD opcodes, qui consistent en

DAA, AAA, AAD, AAM, DAS, AAS

il était une fois, les instructions de chaîne décimale étaient courantes sur le matériel haut de gamme. Il n'est pas clair qu'ils l'ont jamais fait beaucoup d'un cas-test de différence. Les programmes passent beaucoup de temps à tester et à brancher et à déplacer des choses et à calculer des adresses. Il n'a normalement pas faites du bon sens de mettre des macro-opérations dans l'architecture de l'ensemble d'instructions, parce que dans l'ensemble les choses semblent aller plus vite si vous donnez à L'UNITÉ CENTRALE le plus petit nombre de choses fondamentales à faire, de sorte qu'elle puisse mettre toutes ses ressources pour les faire aussi vite que possible.

de nos jours, même les opérations binaires ne sont pas toutes dans le réel ISA. Le cpu traduit L'héritage ISA en micro-ops lors de l'exécution. Tout cela fait partie d'aller vite en se spécialisant dans les opérations de base. Pour l'instant, les transistors gauches semblent attendre un peu de graphisme et de travail 3D, i.e., MMX, SSE, 3DNow!

je suppose qu'il est possible qu'une conception de feuille blanche puisse faire quelque chose de radical et unifier les formats actuels (HW) scientifique et (SW) virgule flottante décimale, mais ne retenez pas votre souffle.

4
répondu DigitalRoss 2009-09-19 01:56:44

non, ils sont très inefficaces de mémoire. Et les calculs sont également sur le matériel pas facile à mettre en œuvre (bien sûr, il peut être fait, mais il peut également prendre beaucoup de temps). Un autre inconvénient du format décimal est, il n'est pas largement utilisé, avant que la recherche a montré que les nombres binaires formatés étaient plus précis le format était populaire pour un temps. Mais maintenant les programmeurs savent mieux. Le format décimal n'est pas efficace et est plus lossy. Aussi matériel supplémentaire-les représentations nécessitent supplémentaire instructions-ensembles, qui peuvent conduire à un code plus difficile.

2
répondu Willem Van Onsem 2009-09-18 23:35:09

le matériel que vous voulez utilisé était assez commun.

les CPU plus anciens avaient l'arithmétique BCD (binaray coded decimal) matérielle. ( Les petites puces d'Intel avait un peu de soutien, comme l'a noté plus tôt, affiches)

Matériel BCD était très bon pour accélérer FORTRAN qui utilisait 80 bit BCD pour les nombres.

l'informatique scientifique constitue un pourcentage important du marché mondial.

puisque tout le monde (relativement parlant) est rentré PC en cours d'exécution fenêtres, le marché est devenu minuscule en pourcentage. Si personne ne le fait plus.

comme cela ne vous dérange pas d'avoir des doubles 64 bits (point flottant binaire) pour la plupart des choses, cela fonctionne surtout.

si vous utilisez 128bit point flottant binaire sur les unités vectorielles matérielles modernes, ce n'est pas trop mal. Encore moins précis que 80bit BCD, mais vous avez compris.

lors d'un travail antérieur, un ancien collègue de JPL s'est étonné que nous utilisions encore FORTRAN. "Nous avons converti en C et C++ , nous a-t-il dit." Je lui ai demandé comment ils ont résolu le problème de manque de précision. Ils n'avaient rien remarqué. (Ils n'ont pas non plus la même précision d'atterrissage qu'auparavant. Mais n'importe qui peut rater une planète.)

donc, en gros, les doublures de 128bit dans l'unité vectorielle sont plus correctes, et largement disponibles.