Dato che si tratta di CS e non StackOverflow, suppongo che tu stia facendo una domanda sull'analisi numerica e (per semplificare le cose) in particolare IEEE-754 in virgola mobile. In tal caso, la risposta alla tua domanda dipende in parte da cosa intendi per "più facile" e in parte dai dettagli del sistema.
Nessuna CPU moderna di cui sono a conoscenza ha un'istruzione integrata che fa esattamente quello che ti aspetteresti sia per l' operazione (che d'ora in poi chiameremo , il suo solito nome in C) o 2 x ( ). Entrambi sono implementati utilizzando le funzioni di libreria.exexp
2xexp2
Come nel caso di tutti i metodi numerici per le operazioni trascendentali, ci sono alcuni casi speciali da considerare:
exp(NaN) = NaN
exp(+Inf) = +Inf
exp(-Inf) = 0
Tuttavia, c'è un'altra cosa che rende il problema leggermente meno complicato: il dominio utile è piuttosto piccolo. Per binary32, exp(x)
underflow se o giù di lì, e overflow se x > 88.7 o giù di lì. Insolitamente per le operazioni trascendentali, possiamo anche ignorare il caso subnormale, poiché è indistinguibile da se è subnormale. Tutto quanto sopra vale anche per , tranne per il fatto che il dominio è leggermente diverso.x<−104x>88.7exp(x)
1.0
x
exp2
ex=2x/ln21ln2exp2
K
exp2(x)=2n×T[j]×P(y)
nxT2j/Kj[0,K)P2x[0,1K)2nTP
f2xm1
2x−1x[−1,1]
Sebbene x87 supporti le istruzioni trascendenti, l'implementazione della libreria software della funzione trascendentale può essere più veloce in molti casi.
Modifica: è stato sottolineato nei commenti che dovrei spiegare alcune delle nuove terminologie utilizzate in IEEE 754-2008. Parte della lingua è cambiata dal 1985 al 1987 e la maggior parte delle persone ha molta più familiarità con il vecchio gergo.
I termini "binary32" e "binary64" sono i nuovi nomi per i numeri a virgola mobile binari a 32 e 64 bit, che il vecchio standard chiamava rispettivamente "singolo" e "doppio".
Il termine "numero subnormale" sostituisce il precedente "numero denormale" o "numero denormalizzato" .