Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    C++ problema funzione pow

    codice:
    #include <iostream>
     using namespace std;
     #include <cmath>
     using std::pow;
      int main() { 
        long long double k = 4; 
        int z;
            for(int i = 1; i <= 10000; i+= 2)
         {
         	for(int x = 1; x <= i; x++)
         	{
         	z = pow(-1, x);
         	}
         	k += ((4*z)/i);
         }
          cout << endl;
     		
         return 0; 
    }
    questo è il mio codice ..mi da però questo errore :"Description Resource Path Location Type
    call of overloaded `pow(int, int&)' is ambiguous istogramma.cpp /istogramma/src line 24 C/C++ Problem".... perchè??come risolvo??

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Probabilmente deve essere

    z = (int)pow(-1.0, x);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    ty ..ora funziona ..ma come mai serve (int) prima di pow w poi -1.0 tra parentesi anche se z è dichiarato come intero??..

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Q.Pagliuca
    ma come mai serve (int) prima di pow
    Perchè pow restituisce un double e tu usi una variabile intera (ti dice niente il "cast" ?)

    poi -1.0 tra parentesi anche se z è dichiarato come intero??..
    Questa non l'ho capita ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon
    Perchè pow restituisce un double e tu usi una variabile intera (ti dice niente il "cast" ?)



    Questa non l'ho capita ...
    ah ok ..non sapevo che restituisse un valore double ..comunque non so perchè ora non mi da errori però non mi mostra l'output..
    codice:
    #include <iostream> 
    using namespace std; 
    #include <cmath> 
    using std::pow;  
    int main() 
    { 
          long long double k = 4;
          int z;
          for(int i = 1; i <= 100000000; i+= 2)
         { 
        	for(int x = 1; x <= i; x++)
         	{
         	z = (int)pow(-1.0, x);
         	}     	k += ((4*z)/i);
         }
          cout << "pi greco è : " << k; 
          cout << endl;
       
      return 0;
     }

    questo è il codice sistemato :S..ma appunto non mi da output ne errore alcuno

  6. #6
    Originariamente inviato da Q.Pagliuca
    ah ok ..non sapevo che restituisse un valore double ..comunque non so perchè ora non mi da errori però non mi mostra l'output..
    codice:
    #include <iostream> 
    using namespace std; 
    #include <cmath> 
    using std::pow;  
    int main() 
    { 
          long long double k = 4;
          int z;
          for(int i = 1; i <= 100000000; i+= 2)
         { 
        	for(int x = 1; x <= i; x++)
         	{
         	z = (int)pow(-1.0, x);
         	}     	k += ((4*z)/i);
         }
          cout << "pi greco è : " << k; 
          cout << endl;
       
      return 0;
     }

    questo è il codice sistemato :S..ma appunto non mi da output ne errore alcuno


    sempre con lo stesso codice apparte che ho aggiunto setprecision e fixed , ora mi visuallizza l'output però mi da k = 4 e mi dice di cambiare long long double in long long int ...ma xk?? a me serve il double devo vedere i numeri dopo la virgola .. è come se non prendesse il comando dei for :S

  7. #7
    Codice PHP:
    #include <iostream> 
    #include <cmath> 

    using namespace std

    int main() 

          
    double k 4.0//<- 1
          
    int z;
          
          for(
    int i 1<= 10000i+= 2)
         { 
            for(
    int x 1<= ix++)
             {
                
    = (int)pow(-1.0x);
             }         
            
    += ((4.0*z)/i); //<- 2
         
    }
          
    cout << "pi greco e' : " << k
          
    cout << endl;
       
      return 
    0;

    Non ho idea di che algoritmo stai usando quindi non posso dirti perchè il valore finale è sbagliato. Però il problema del double è risolto con le righe (1) e (2).
    In (1), puoi usare long double ma non long long double.
    In (2), prima c'era (4*z)/i, che erano tutti interi, quindi veniva eseguita prima la moltiplicazione e poi la divisione tra interi. Basta forzare il numeratore ad essere un double per avere un risultato double e non int. Ovviamente avresti potuto anche scrivere

    Codice PHP:
    += (((double)4*(double)z)/(double)i); 
    per indicare esplicitamente che le operazioni sono tra double, per rendere più leggibile il codice. Questione di gusti.

    Un'ultima cosa, se scrivi using namespace std, non hai bisogno di indicare anche using std:ow, è implicito.
    Sarebbe stato diverso se pow fosse stato definito in un altro namespace, tipo

    using namespace std;
    usign mate:ow;

  8. #8
    grazie mille ora va ..solo ho problemi se aumento la i ..ovvero se voglio un calcolo più preciso del pi greco(che è quello che deve fare l'algoritmo) devo ingrandire sempre più la i ma poi ritorna il problema dell'output , cioè che non mi visualizza l'Output...

  9. #9
    prima del post di prima (scusa il gioco di parole) ho provato esattamente il codice da te postato. Non credo sia il problema del'output, credo che sia i troppo grande e ci mette una vita a calcolare. Io ho aspettato 10 secondi buoni ma ancora non mi stampava niente.
    Cerca di fare prove in cui incrementi i gradualmente e vedere se va bene.

  10. #10
    Originariamente inviato da antotan
    prima del post di prima (scusa il gioco di parole) ho provato esattamente il codice da te postato. Non credo sia il problema del'output, credo che sia i troppo grande e ci mette una vita a calcolare. Io ho aspettato 10 secondi buoni ma ancora non mi stampava niente.
    Cerca di fare prove in cui incrementi i gradualmente e vedere se va bene.

    ok ..grazie mille

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 © 2025 vBulletin Solutions, Inc. All rights reserved.