Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    148

    [C] Condizione di overflow

    Salve, devo fare un esercizio che rilevi se avviene overflow per la somma di due numeri. Se si considerano:

    int a,b,risultato;


    Se setto sia a sia b a dei valori che siano minori del valore massimo scrivibile su un int, e ne faccio la somma (o la moltiplicazione )è possibile che questa (risultato) superi il massimo valore di un int. Il problema è che il risultato, dichiarandolo come int non potrà contenere un numero maggiore del massimo numero scrivibile su un int(ovviamente). Come faccio a rilevare l'overflow??? Ho sentito parlare di una variabile "errno" che potrebbe essere utile.
    Spero possiate aiutarmi Grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Io direi di studiare il segno degli operandi e del risultato ...

    Prova questo semplice esempio

    codice:
    	int a = 2000000000;
    	int b = 2000000000;
    	int c;
    
    	c = a + b;
    
    	printf("%d + %d = %d\n", a, b, c);
    e datti una spiegazione di quello che succede ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    148
    Della variabile errno sai qualcosa?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    La variabile errno puoi utilizzarla in questo modo

    codice:
    #include <math.h>
    #include <errno.h>  /* to allow checking of int errno */
    
       ...
       double x;
       x = pow( 10.0, 1000.0 );
       printf( "\npow(10, 1000) = %f : errno = %i", x, errno );
    
       if( ERANGE == errno )
       {
            printf( "\nRange error.\n" );
            errno = 0;       
       }
       
       ...
    ma non per l'addizione che ti ho mostrato ...

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [C] Condizione di overflow

    Originariamente inviato da andry85
    Salve, devo fare un esercizio che rilevi se avviene overflow per la somma di due numeri. Se si considerano:

    int a,b,risultato;


    Se setto sia a sia b a dei valori che siano minori del valore massimo scrivibile su un int, e ne faccio la somma (o la moltiplicazione )è possibile che questa (risultato) superi il massimo valore di un int. Il problema è che il risultato, dichiarandolo come int non potrà contenere un numero maggiore del massimo numero scrivibile su un int(ovviamente). Come faccio a rilevare l'overflow???
    Per la somma è abbastanza semplice ma bisogna usare l'algebra booleana. In pratica devi prendere in considerazione il bit più a sinistra dei due operandi e del risultato.
    Scrivi una tabella di verità in cui hai come input i tre bit appena detti e come output l'overflow. Quindi determina la funzione booleana da usare per calcolare l'overflow.

    Tra l'altro questa "logica" è spiegata sicuramente bene in tutti i manuali dei microprocessori/microcontrollori dove si parla del flag di overflow.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472

    Re: Re: [C] Condizione di overflow

    Originariamente inviato da andbin
    Per la somma è abbastanza semplice ma bisogna usare l'algebra booleana. In pratica devi prendere in considerazione il bit più a sinistra dei due operandi e del risultato.
    Scrivi una tabella di verità in cui hai come input i tre bit appena detti e come output l'overflow. Quindi determina la funzione booleana da usare per calcolare l'overflow.
    E inoltre una bella ripassata al "complemento a 2" potrebbe chiarirti il perche' quest'ultimo bit a sinistra (quello del segno, per cui ti ho invitato a studiare i segni degli operandi e del risultato) sia importante ai fini dell'overfow ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    148
    Scusate ma non basta guardare se il risultato supera un certo valore???

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Ma hai fatto la prova che ti ho mostrato? Da quello che chiedi, sembra di no ...

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da andry85
    Scusate ma non basta guardare se il risultato supera un certo valore???
    No, non puoi basarti solo sul valore del risultato (perché è della stessa dimensione degli operandi).

    Per quanto riguarda la somma, le uniche 2 situazioni in cui hai un overflow sono quando:
    - Due numeri positivi sommati danno come risultato un numero negativo
    - Due numeri negativi sommati danno come risultato un numero positivo

    Quindi, anche senza voler scendere nell'algebra booleana (se si volesse ragionare in termini dei bit più significativi) fare un test del genere con qualche 'if' sarebbe abbastanza semplice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    148
    Originariamente inviato da oregon
    Ma hai fatto la prova che ti ho mostrato? Da quello che chiedi, sembra di no ...

    Si l'ho fatta la prova , il risultato è un numero negativo

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.