Zadana dokładność - dziwny problem.

0

Nie wiem co się stało, ale tak jakby nie liczyło liczb zmiennoprzecinkowych np. dam

cout<<1/2

da mi wynik '0'

Dla mojego kodu, cały czas daje '6'. Co jest źle?

#include<math.h>
#include<cstdlib>
#include<iostream>
#include<conio.h>

using namespace std;

int main()
{

	double dokladnosc;
	cout << "Wprowadz dokladnosc np.(0.001) : ";
	cin >> dokladnosc;

	
	double wynik = 0, ostatni=1;
	int n = 1;

	do
	{
		
		wynik += 1/n*(n+1)*(n+2);
		ostatni = 1 / n*(n + 1)*(n+2);
	    n++;

	} while (ostatni > dokladnosc);

	cout << wynik;

	_getch();
	return 0;
}
0

wynik += 1/n*(n+1)*(n+2); oznacza: wynik+=(1/n)*(n+1)*(n+2); Całą matematykę przewagarowałeś?

1

W C++ operator dzielenia zachowuje się różnie w zależności od tego co dzielisz.
Ty dzielisz int/int więc dostajesz też int. Wynik jest zaokrąglany do liczby całkowitej bliższej zeru.
Jeśli chcesz uzyskać wynik double do przynajmniej jeden operand musi być typu double. Możesz to uzyskać zmieniając 1 na 1.0

0

@_13th_Dragon -> tak razem z tobą, siedząc na tym forum
@Sopelek -> cenna uwaga, dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1