Operazioni ed espressioni

di il
18 risposte

Operazioni ed espressioni

Se voglio calcolare con un double un'espressione di questo tipo:
double ex1=3/5*2-1;
Devo per forza esprimere il 3, il 5 o il 2 con un decimale per aver il risultato della differenza come double?
Cioè dovrei scrivere p.e. 3.0/5*2-1 ?
Il compilatore se non trova neppure un numero decimale esegue l'espressione con gli interi e poi converte il risultato implicitamente in double?

Poi mi chiedo per la priorità degli operatori è rispettata questa sequenza : */% poi +-
Ma non credo sia importante tra +- rispettare l'ordine visto che sono operazioni che godono della proprietà commutativa, o sbaglio?

18 Risposte

  • Re: Operazioni ed espressioni

    .
  • Re: Operazioni ed espressioni

    Questi non sono dubbi da forum ... basta un.libro ....
  • Re: Operazioni ed espressioni

    Devo per forza esprimere il 3, il 5 o il 2 con un decimale per aver il risultato della differenza come double?
    In realtà se vuoi avere come risultato 0.2 devi convertire o il 3 o il 5 in double, altrimenti la divisione tra 3 e 5 viene calcolata come divisione intera.
  • Re: Operazioni ed espressioni

    .
  • Re: Operazioni ed espressioni

    oregon ha scritto:


    Questi non sono dubbi da forum ... basta un.libro ....
    Non risparmi mai nessuno!
    Non ti è venuto il dubbio che a volte le cose facili da capire per qualcuno non lo siano anche per gli altri?
    E che prima di scrivere, a volte si prova a cercare altrove?
    Beh scusami la polemica ma che il tuo spirito mi sembra eccessivo, o forse valori come collaborazione e supporto sono riservati a livelli di un certo tipo a cui ovviamente non appartengo.
    Chiudo qua.
  • Re: Operazioni ed espressioni

    migliorabile ha scritto:


    @Nippolo: per le regole del C++, basta che UNO degli elementi dell'espressione sia in double per convertite tutta l'espressione in double.
    In questo caso anche soltanto il "1"
    avevo provato a modificare 1 in 1.0 ma ottengo come risultato un numero intero.
    Solo se cambio i membri della / * ottengo un reale.
  • Re: Operazioni ed espressioni

    .
  • Re: Operazioni ed espressioni

    @Nippolo: per le regole del C++, basta che UNO degli elementi dell'espressione sia in double per convertite tutta l'espressione in double.
    In questo caso anche soltanto il "1"
    Ipotizzando di convertire uno solo degli elementi dell'espressione in double, ovviamente alla fine il risultato dell'espressione sarà in double a prescindere dalla scelta effettuata, il risultato invece cambia.
    Lanciando il seguente codice
    cout << (double)3 / 5 * 2 - 1 << endl;
    cout << 3 / (double)5 * 2 - 1 << endl;
    cout << 3 / 5 * (double)2 - 1 << endl;
    cout << 3 / 5 * 2 - (double)1 << endl;
    si ottiene il seguente output
    0.2
    0.2
    -1
    -1
  • Re: Operazioni ed espressioni

    zio_mangrovia ha scritto:


    oregon ha scritto:


    Questi non sono dubbi da forum ... basta un.libro ....
    Non risparmi mai nessuno!
    Hai fatto circa 150 domande sul C/C++ sul forum come se fossi in un corso personalizzato.
    Hai avuto sempre risposte, finanche hai scritto in privato per chiedere risposte come si fa ai docenti all'università.

    Potrò anche ricordarti che, su argomenti semplici, puoi sempre provare e studiare da solo, non credi?

    In ogni caso, da oggi sei pregato di non disturbare più in privato, io ricambierò non rispondendo più ai tuoi post.
  • Re: Operazioni ed espressioni

    Nippolo ha scritto:


    @Nippolo: per le regole del C++, basta che UNO degli elementi dell'espressione sia in double per convertite tutta l'espressione in double.
    In questo caso anche soltanto il "1"
    Ipotizzando di convertire uno solo degli elementi dell'espressione in double, ovviamente alla fine il risultato dell'espressione sarà in double a prescindere dalla scelta effettuata, il risultato invece cambia.
    Lanciando il seguente codice
    cout << (double)3 / 5 * 2 - 1 << endl;
    cout << 3 / (double)5 * 2 - 1 << endl;
    cout << 3 / 5 * (double)2 - 1 << endl;
    cout << 3 / 5 * 2 - (double)1 << endl;
    si ottiene il seguente output
    0.2
    0.2
    -1
    -1
    È normale, la divisione viene eseguita prima della somma e quindi viene eseguita tra interi se uno dei due operandi non è un double
  • Re: Operazioni ed espressioni

    Non vorrei essere polemico, ma la situazione lo richiede...

    zio_mangrovia ha esordito con:
    Devo per forza esprimere il 3, il 5 o il 2 con un decimale per aver il risultato della differenza come double?
    domanda non proprio chiarissima, ma si capisce che si riferisce ai fini del risultato e non al tipo in sé.

    migliorabile replica con
    1) si
    risposta in generale non sbagliata, ma quantomeno equivoca dal momento che il risultato cambia.

    oregon con
    Questi non sono dubbi da forum ... basta un.libro ....
    dimostra di dare più importanza alla forma che al contenuto, poiché non prende minimamente in considerazione la suddetta questione.

    Io cerco di chiarire la questione con il seguente post:
    In realtà se vuoi avere come risultato 0.2 devi convertire o il 3 o il 5 in double, altrimenti la divisione tra 3 e 5 viene calcolata come divisione intera.
    migliorabile replica con
    @Nippolo: per le regole del C++, basta che UNO degli elementi dell'espressione sia in double per convertite tutta l'espressione in double.
    In questo caso anche soltanto il "1"
    ancora una volta una risposta di per sé non proprio sbagliata, ma in replica al mio post mi fa pensare che egli sia convinto che a prescindere dall'elemento convertito in double, il risultato non cambia (cosa ovviamente errata). In ogni caso starà alla sua onestà intellettuale stabilire quale sia la verità.

    zio_mangrovia dopo essersi sfogato posta
    avevo provato a modificare 1 in 1.0 ma ottengo come risultato un numero intero.
    Solo se cambio i membri della / * ottengo un reale.
    dimostrando che la superficiale risposta di migliorabile non ha fatto altro che alimentare altri dubbi.

    migliorabile con il successivo post ignora completamente la questione "pratica" e attacca con la solita paternale piena di luoghi comuni.

    Con il mio successivo post tento di chiarire la questione pratica sollevata, con il risultato di venire completamente ignorato dai diretti interessati (zio_mangrovia e migliorabile).

    IfNotFalseTrue ha scritto:


    È normale, la divisione viene eseguita prima della somma e quindi viene eseguita tra interi se uno dei due operandi non è un double
    Se leggi i miei precedenti post ti accorgerai che non sono io quello a cui farlo notare!

    Morale della storia:
  • Re: Operazioni ed espressioni

    Mica ho scritto "Hey Nippolo, guarda che funziona così", ho quotato solo il tuo post perché aveva gli esempi e mi sembrava sensato accennare al perché visto che non mi sembrava fosse stato detto esplicitamente nella discussione. Se ti disturba edito il post, non so davvero che dire
  • Re: Operazioni ed espressioni

    IfNotFalseTrue ha scritto:


    ...mi sembrava sensato accennare al perché visto che non mi sembrava fosse stato detto esplicitamente nella discussione.

    Nippolo ha scritto:


    In realtà se vuoi avere come risultato 0.2 devi convertire o il 3 o il 5 in double, altrimenti la divisione tra 3 e 5 viene calcolata come divisione intera.

    IfNotFalseTrue ha scritto:


    Mica ho scritto "Hey Nippolo, guarda che funziona così", ho quotato solo il tuo post perché... Se ti disturba edito il post, non so davvero che dire
    Figurati!
  • Re: Operazioni ed espressioni

    A dir la verità ho apprezzato le risposte di tutti che messe insieme mi hanno chiarito un po' di dubbi e pertanto vi ringrazio.
    Non so se da solo ce l'avrei fatta
Devi accedere o registrarti per scrivere nel forum
18 risposte