PDA

Visualizza la versione completa : [C++] Verificare i limiti con operazioni aritmetiche


ilmo lesto
25-03-2010, 12:02
Salve a tutti,
come faccio a verificare che un'operazione aritmetica tra due int non esca dal range di valori possibili?

Avevo pensato all'utilizzo di numeric_limits, ma il problema è che il risultato dell'operazione viene comunque troncato, e quindi numeric_limits::max() non mi può venire in aiuto.

Avevo pure pensato di salvare temporaneamente il risultato in un long, ma la soluzione è da scartare visto che su alcune architetture long e int coincidono..

Ho cercato in rete, convinto di trovare una vastità di soluzioni al mio problema, ma la realtà è che non sono riuscito a trovare nulla.. Probabilmente utilizzo parole chiave sbagliate oppure il problema non è così semplice e di facile soluzione come inizialmente pensavo..

Qualche idea?

Grazie!

shodan
25-03-2010, 12:43
Che io sappia non c'è modo di saperlo a priori.
L'unica cosa che puoi fare è passare a un tipo int superiore (LONG LONG o __int64 a seconda del compilatore) e poi verificare i 32 bit superiori. Se uno solo di questi bit è 1, hai sforato il limite dell'int32.
L'alternativa è rivolgersi a librerie specializzate (gnu mi pare abbia qualcosa).

oregon
25-03-2010, 13:30
Forse potresti lavorare in Assembly (x86) e testare i flag della CPU (che indicano l'overflow) dopo la somma.

ilmo lesto
25-03-2010, 14:25
Originariamente inviato da oregon
Forse potresti lavorare in Assembly (x86) e testare i flag della CPU (che indicano l'overflow) dopo la somma.

:dhò: Questa è una strada per me ora improponibile (mi piacerebbe.. ma forse se ne riparla tra qualche annetto.. :D )



Originariamente inviato da shodan
L'alternativa è rivolgersi a librerie specializzate


Questa soluzione potrebbe essere invece più alla mia portata: resta da capire se esiste qualcosa in C++ / C che faccia al caso mio..

Rimango sempre in attesa di nuovi possibili spunti..

Nel frattempo grazie per l'interessamento!

MItaly
25-03-2010, 21:20
http://forum.html.it/forum/showthread.php?s=&threadid=1378730

ilmo lesto
25-03-2010, 22:03
Originariamente inviato da MItaly
http://forum.html.it/forum/showthread.php?s=&threadid=1378730

:unz:
sembra proprio la soluzione cucita su misura per me!

che dire..
Grazie mille? :D

:ciauz:

MItaly
25-03-2010, 22:43
Di niente; ciao! :ciauz:

Loading