Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156

    [C++] Verificare i limiti con operazioni aritmetiche

    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!

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    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).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Forse potresti lavorare in Assembly (x86) e testare i flag della CPU (che indicano l'overflow) dopo la somma.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156
    Originariamente inviato da oregon
    Forse potresti lavorare in Assembly (x86) e testare i flag della CPU (che indicano l'overflow) dopo la somma.
    Questa è una strada per me ora improponibile (mi piacerebbe.. ma forse se ne riparla tra qualche annetto.. )


    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!

  5. #5
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156
    Originariamente inviato da MItaly
    http://forum.html.it/forum/showthrea...readid=1378730

    sembra proprio la soluzione cucita su misura per me!

    che dire..
    Grazie mille?


  7. #7
    Di niente; ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.