Oppure

Loading
07/03/10 12:59
scarlett68
si può fare con il Dev? lo chiedo perchè il prof ha detto di usare quello ma io non lo conosco abbastanza!
aaa
07/03/10 15:29
Poggi Marco
Postato originariamente da scarlett68:

Postato originariamente da Poggi Marco:

Che IDE usi?
( Nun dirmi Borland c++ 3.1 ! )

Si proprio quello Borland Turbo C++ for windows 3.1. A scuola usiamo questo solo la versione più vecchia !
comunque ho provato come dici tu ma non funziona lo stesso anzi si blocca a n. 31900 e poi non risponde più


Ecco perchè si blicca a 31900!

Borland c++ 3.1 utilizza il vechio standard c++.
Di conseguenza il tipo int è composto da soli 2 byte, e il suo reng va da -32768 a 32767.
Per lavorare con numeri interi maggiori c'è a disposizione il tipo long o unsigned long.

Il programma si blocca anche dichiarando n long double perche, probabilmente, nella condizione di uscita dal ciclo dichiari " while (n<10000000); ".
Così facendo 10000000 viene convertito in tipo int, con conseguente problema di overflow.
In questi casi devi dichiarare " while (n<10000000UL); "
Il suffisso UL indica al compilatore di donsiderare il numrro unsigned long.

aaa
07/03/10 16:21
Calma ... spieghiamoci ... tu parli di 10000000 di RIPETIZIONI o 10000000 di CIFRE decimali?
07/03/10 16:27
Poggi Marco
Certamente 10000000 riprtizioni.
Non tutti sono in grado di calcolare e con 10000000 cifre significative!
aaa
07/03/10 20:19
scarlett68
Mi dispiace non sapermi spiegare! Io parlo di applicare la formula (1+1/n)^n con n crescente fino ad arrivare a 10000000 quindi
n e
1    2 dato da (1+1/1)^1 =2
10     2,5937425 dato da (1+1/10)^10= 2,5937425
50    2,6915880
100    2,7048138
500    2,7155685
1000    2,7169239
5000    2,7180101
10000    2,7181459
......
......
10000000 .........?

Il mio programma si blocca dopo 31900 (n) senza riuscire ad andare oltre e comunque come valore numerico si ferma alle prime 6 cifre
Ultima modifica effettuata da scarlett68 07/03/10 20:22
aaa
07/03/10 20:27
Poggi Marco
Hai modificato il il tipo alle variabili?

In output vedi solo 6 cifre perche il c++ è preimpostato così.
Se vuoi una precisione maggiore devi usare la funzione setprecision.
Vedi quì: cplusplus.com/reference/iostream/manipulators/setprecision/
aaa
07/03/10 20:32
Postato originariamente da scarlett68:

Mi dispiace non sapermi spiegare! Io parlo di ...


Prova così ...

	double e; 
	long int n=1; 

	cout.precision(17);

	do 
	{ 
		e = pow((double)(1.0 + 1.0/n), (double)n); 

		if((n % 1000) == 0)
			cout << n << '\t' << e << endl; 

		n= n+1; 
    } while (n<=10000000); 
07/03/10 21:40
scarlett68
grandeeeee!!!! Grazie, erano tre giorni che smanettavo
Ultima modifica effettuata da scarlett68 07/03/10 21:47
aaa