Domanda

Supponiamo che io abbia due tipi di numeri reali. Possono essere fluttuanti o punto fisso. Come posso costruire un nuovo tipo i cui valori sono almeno l'unione dei due con il numero minimo di bit?

Ci sono 3 casi da considerare:

Fisso (qa.x) $ coppa $ fisso (qb.y) - Penso che il meglio qui sia usare Qmax (a, b) .max (x, y). Penso che questo sia ottimale dal momento che non riesco a trovare nulla di più piccolo che rappresenterà accuratamente il tipo.

Float (FAEX) $ CUP $ FLOAT (FBEY) - Penso che il meglio qui sia usare fmax (a, b) emax (x, y). Ancora una volta non riesco a pensare a una soluzione più ottimale.

sto usando Q notazione per rappresentare i tipi di punti fissi. Non so come i tipi di punti mobili siano in genere rappresentati; Sto usando una rappresentazione analoga in cui FAEX significhi un bit di mantissa e x bit di esponenti.

Il caso difficile è:

Fisso (qa.x) $ coppa $ float (fbey) - Il meglio che riesco a trovare è Qmax (a, n) .max (x, m) dove n è i bit minimi per rappresentare il numero più grande che il galleggiante può essere e m è il numero minimo di bit per rappresentare il più piccolo positivo frazione il galleggiante può essere. Ciò sembra estremamente inefficiente in quanto estende la precisione più accurata del punto galleggiante a tutta la sua gamma. Pertanto, per qualsiasi tipo di punto galleggiante di dimensioni decenti, il tipo sindacale risultante sarà estremamente grande.

Ecco alcuni diagrammi ASCII dei tre casi (semplificati) e perché penso di aver torto:

     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?  |...|...|...|...|...|...|...|...|.......|.......|.......|.......|...............................|...............................|

Dalla mia matematica il meglio che potrei fare sarebbe Q2.3, ma è abbastanza ovvio che dovrebbe esistere un tipo di punto galleggiante che smette di avere la precisione necessaria una volta che la precisione della parte mobile non è più necessaria. Ovviamente devo stare attento se il tipo di punto fisso è più accurato anche della gamma più accurata del tipo di punto galleggiante, ma mi sento comunque come se mi mancasse una bella soluzione.

Qualche idea su quale tipo binario sarà il più piccolo superset dell'Unione tra un tipo di punto fisso e galleggiante?

Nota: so che ciò enfatizza anche i benefici e gli svantaggi di tipi fissi e galleggianti, ma sento che dovrebbe essere possibile fare almeno un po 'meglio. Soprattutto nella situazione in cui i tipi hanno confini di gamma noti.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top