Question

Dites que j'ai deux types de nombres réels. Ils peuvent être des points flottants ou fixes. Comment puis-je construire un nouveau type dont les valeurs sont au moins l'union des deux avec le nombre minimal de bits?

Il y a 3 cas à considérer:

Correction (qa.x) $ cup $ fixe (qb.y) - Je pense que le meilleur ici est d'utiliser Qmax (a, b) .max (x, y). Je pense que c'est optimal car je ne peux pas trouver quelque chose de plus petit qui représentera avec précision le type.

Float (faex) $ cup $ float (fbey) - Je pense que le meilleur ici est d'utiliser fmax (a, b) emax (x, y). Encore une fois, je ne peux pas penser à une solution plus optimale.

j'utilise Q Notation pour représenter les types de points fixes. Je ne sais pas à quel point les types de points flottants sont généralement représentés; J'utilise une représentation analogue où FAEX signifie des bits de mantissa et x bits d'exposant.

Le cas difficile est:

Correction (qa.x) $ cup $ float (fbey) - Le mieux que je puisse trouver est Qmax (a, n) .max (x, m) où n est les bits minimaux pour représenter le plus grand nombre que le flotteur peut être et m est le nombre minimal de bits pour représenter le plus petit positif fraction que le flotteur peut être. Cela semble extrêmement inefficace car il étend la précision la plus précise du point flottant à toute sa gamme. Ainsi, pour tout type de point flottant de taille décente, le type d'union résultant sera extrêmement important.

Voici quelques diagrammes ASCII des trois cas (simplifiés), et pourquoi je pense que je me trompe:

     0/4     1/4     2/4     3/4     4/4     5/4     6/4     7/4     8/4     9/4    10/4    11/4    12/4    13/4    14/4    15/4    16/4
      | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Q1.2  |.......|.......|.......|.......|.......|.......|.......|........................................................................
U     .................................................................................................................................
Q0.3  |...|...|...|...|...|...|...|....................................................................................................
=     .................................................................................................................................
Q1.3  |...|...|...|...|...|...|...|...|...|...|...|...|...|...|........................................................................

     0/4     1/4     2/4     3/4     4/4     5/4     6/4     7/4     8/4     9/4    10/4    11/4    12/4    13/4    14/4    15/4    16/4
      | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
F1E2  ........|...|...|.......|.......|...............|...............|...............................|................................
U     .................................................................................................................................
F2E1  ................|...|...|...|...|.......|.......|.......|........................................................................
=     .................................................................................................................................
F2E2  ................................|.......|.......|.......|.......|...............|...............|...............|................


     0/4     1/4     2/4     3/4     4/4     5/4     6/4     7/4     8/4     9/4    10/4    11/4    12/4    13/4    14/4    15/4    16/4
      | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . | . v . |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Q0.3  |...|...|...|...|...|...|...|....................................................................................................
U     .................................................................................................................................
F1E2  ........|...|...|.......|.......|...............|...............|...............................|................................
=     .................................................................................................................................
Q2.3  |...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|...|........
F?E?  |...|...|...|...|...|...|...|...|.......|.......|.......|.......|...............................|...............................|

De mes mathématiques, le mieux que je pourrais faire serait Q2.3, mais il est assez évident qu'il devrait exister un type de point flottant qui cesse d'avoir la précision nécessaire une fois que la précision de la partie flottante n'est plus nécessaire. Bien sûr, je dois être prudent si le type de point fixe est plus précis que même la plage la plus précise du type de point flottant, mais j'ai toujours l'impression de manquer une belle solution.

Une idée de quel type binaire sera le plus petit superset de l'Union entre un type de point fixe et flottant?

Remarque: Je sais que cela met également l'accent sur les avantages et les inconvénients des types fixes et flottants, mais je pense qu'il devrait être possible de faire au moins un peu mieux. Surtout dans la situation où les types ont connu les limites de l'ordre.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top