Divisione per 0

di il
9 risposte

Divisione per 0

Ciao a tutti. Sto cercando di trovare un modo di far capira al computer se un'operazione è impossibile, nel particolare se sto dividendo un numero per 0, o se comunque il risultato non esiste. Per esempio

int main()
{
  Int a=10;
  cout<<a/0;
  return 0;
}
Però non viene stampato nulla. Dovrei fare una cosa tipo

int main()
{
  int a=10
  if(a/0==impossibile)
    cout<<"impossibile";
  return 0;
  }
Dove al posto di a/0==impossibile ci metto qualcosa che faccia capire che è impossibile (come proprio a/0 che è dovrebbe dare errore)

9 Risposte

  • Re: Divisione per 0

    Banalmente controlla che il denominatore sia diverso da zero, se non lo è dai errore.
  • Re: Divisione per 0

    Si ma a me serve per calcolare le condizioni di esistenza di una funzione. Questo vuol dire che avrò una variabile y, che sarà uguale a (per esempio) (x+3)/x e devo controllare se, assegnando a x il valore 1 e il valore 0, è valida o no. Per 1 dovrebbe dirmi di si, ma per 0 ovviamente no. Se io faccio
    
    int main()
    {
      int x,y;
      x=1;
      y=(x+3)/x;
      if(y==impossibile)
        cout<<"impossibile";
      x=0;
      y=(x+3)/x;
      if(y==impossibile)
        cout<<"impossibile";
        return 0;
    
    Come faccio? La prima volta dovrebbe non succedere nulla, ma la seconda dovrebbe dire impossibile. Come faccio a fare quell'if?
  • Re: Divisione per 0

    ANDPRI ha scritto:


    Si ma a me serve per calcolare le condizioni di esistenza di una funzione. Questo vuol dire che avrò una variabile y, che sarà uguale a (per esempio) (x+3)/x e devo controllare se, assegnando a x il valore 1 e il valore 0, è valida o no. Per 1 dovrebbe dirmi di si, ma per 0 ovviamente no. Se io faccio
    
    int main()
    {
      int x,y;
      x=1;
      y=(x+3)/x;
      if(y==impossibile)
        cout<<"impossibile";
      x=0;
      y=(x+3)/x;
      if(y==impossibile)
        cout<<"impossibile";
        return 0;
    
    Come faccio? La prima volta dovrebbe non succedere nulla, ma la seconda dovrebbe dire impossibile. Come faccio a fare quell'if?
    Non capisco dove sia il problema. Prima di y=(x+3)/x, controlli il caso in cui x=1 e sai che è ok, il secondo caso già sai che è impossibile, non serve fare l'if (y==impossibile). Basta stampare impossibile direttamente quando x=0.

    Nel caso generale controlli sempre prima il denominatore, se questo è zero, sai che è impossibile. Tutto qua.
  • Re: Divisione per 0

    Si ma mi serve per trovare i numeri che rendono impossibile la y: teoricamente dovrei scrivere y=equazione e poi con un for, provare ogni valore per x e vedere se l'equazione è impossibile, trovando così i valori da escludere. Però visto che alcune equazioni non soNo semplici come (x+3)/x devo trovare un modo per sapere se è impossibile, altrimenti dovrei usare i metodi per trovare le condizioni di esistenza solo che non sono capace su c++. Per questo voglio provare tutti i numeri per trovare quelli da escludere. Una specia di "forza bruta" per le condizioni di esistenza
  • Re: Divisione per 0

    Il problema NON E' BANALE.

    Lo standard IEE 754 (quello usato per rappresentare i float/double) prevede diversi pattern associati a particolaro situazioni:

    - piu'/meno infinito
    - nan (not a number).

    Devi andare a caccia di informazioni perche', se non sbaglio, e' possibile abilitare il supporto di questi casi, e ci sono dei predicati appositi per testare l'esistenza dell'infinito o del nan.

    Ci sono sicuramente direttive a livello di compilatore, ma ci dovrebbero anche essere delle keyword del linguaggio.
  • Re: Divisione per 0

    Quindi che mi consigli di fare?
  • Re: Divisione per 0

    ANDPRI ha scritto:


    Quindi che mi consigli di fare?
    Potresti usare la libreria

    Ad esempio queste potrebbero esserti utili:
    
    std::isinf()  // Is infinity 
    std::isnan()   // Is Not-A-Number 
    Nell'esempio di prima, dove y=(x+3)/x;, puoi controllare cosa restituisce std::isinf(y), se ti restituisce true, allora hai avuto una divisione per zero.

    Dai anche uno sguardo a .
  • Re: Divisione per 0

    Wow grazie proprio quello che mi serviva. Ora lo provo subito grazie mille
  • Re: Divisione per 0

    ANDPRI ha scritto:


    Wow grazie proprio quello che mi serviva. Ora lo provo subito grazie mille
    Google è tuo amico, e spesso la risposta ai tuoi problemi la ritrovi autonomamente anche e soprattutto studiando la documentazione dello specifico linguaggio. Good Work
Devi accedere o registrarti per scrivere nel forum
9 risposte