Molto dipende dal contesto. Per essere perfettamente portatile, è necessario controllare prima dell' l'operazione, ad es. (per aggiunta):
if ((a < 0.0) == (b < 0.0)
&& std::abs(b) > std::numeric_limits<double>::max() - std::abs(a)) {
// Addition would overflow...
}
La logica simile può essere utilizzata per i quattro operatori di base.
Se tutte le macchine che si target supportano IEEE (che è probabilmente il caso, se non si dispone di considerare mainframe), si può solo fare le operazioni, quindi utilizzare isfinite
o isinf
sui risultati.
Per underflow, la prima domanda è se un underflow graduale conta come underflow oppure no. In caso contrario, è sufficiente verificare se i risultati sono zero e a != -b
farebbe il trucco. Se si desidera per rilevare un underflow graduale (che probabilmente è presente solo se si dispone di IEEE), allora è possibile utilizzare isnormal
— questo sarà return false se i risultati corrispondono a un underflow graduale. (A differenza di troppo pieno, si prova per underflow dopo l'operazione.)
fonte
2013-03-27 09:36:00
vuoi scoprire quale valore causerebbe un overflow? – 4pie0
@ cf16 Sto cercando codice di esempio su come controllare overflow e underflow su operatoin arthimetic su double. – venkysmarty
Verifica i valori di +/- Inf –