Sto lavorando per aggiungere interi multiprecisione alla suite di tipi numerici nel mio interprete APL , ma io Non sono sicuro di cosa fare riguardo alle strane combinazioni di tipi che ora si presentano. Ora ho i seguenti tipi:
IMM "atomic" small integer
FIX full-width integer
FLO floating-point double
MPI multi-precision integer
Ho una variabile che controlla quale tipo più grande usare per l'overflow dei numeri interi, FLO o MPI. Le operazioni miste MPI / IMM / FIX, poiché sono tutti numeri interi, possono semplicemente promuovere il tipo più largo e produrre un risultato di quel tipo. E le operazioni miste FLO / IMM / FIX possono seguire lo stesso schema poiché una doppia può comodamente ospitare tutti i valori di un numero intero a 32 bit. Questo copre la maggior parte dei casi. Ma mi lascia con queste combinazioni di tipi che non hanno una regola evidente (per me) da seguire.
FLO {+-*/} MPI
MPI {+-*/} FLO
Dopo averlo scritto, suppongo che ci sia davvero una soluzione ovvia (virgola mobile a più precisione). Ma non voglio farlo adesso. C'è una scorciatoia sensata che posso prendere (per ora)?
Come scenario di "caso peggiore" che offre almeno un qualche tipo di risultato, posso implementare conversioni tra questi due tipi. Ma c'è una potenziale perdita di dati a ogni modo.
FLO -> MPI loses fractional part of floating-point number
MPI -> FLO loses precision from integer