Kod: Zaznacz cały
int delta ;
Kod: Zaznacz cały
int delta ;
Kod: Zaznacz cały
#include <iostream>
#include <conio.h>
#include <math.h>
int main()
{
float a ;
float b ;
float c ;
float delta ;
sqrt(delta);
std:: cout << "Podaj liczbe a : " ;
std:: cin >> a ;
std:: cout << "Podaj liczbe b : " ;
std:: cin >> b ;
std:: cout << "Podaj liczbe c : " ;
std:: cin >> c ;
delta = b*b - 4*a*c ;
if (delta == 0)
{
std:: cout << "Funckja ma jedno miejsce zerowe. Jest nim: " << -b/2*a ;
}
else if (delta < 0);
{
std:: cout << "Funkcja nie ma miejsc zerowych" ;
}
else if (delta > 0) ;
{
std:: cout << "Funckja ma dwa miejsca zerowe.
}
getch();
}
Kod: Zaznacz cały
#include <iostream>
#include <conio.h>
#include <math.h>
int main()
{
float a ;
float b ;
float c ;
float delta ;
std:: cout << "Podaj liczbe a : " ;
std:: cin >> a ;
std:: cout << "Podaj liczbe b : " ;
std:: cin >> b ;
std:: cout << "Podaj liczbe c : " ;
std:: cin >> c ;
delta = b*b - 4*a*c ;
if (delta == 0)
{
std:: cout << "Funckja ma jedno miejsce zerowe. Jest nim: " << -b/2*a ;
}
else if (delta < 0);
{
std:: cout << "Funkcja nie ma miejsc zerowych" ;
}
else if (delta > 0) ;
{
std:: cout << "Funckja ma dwa miejsca zerowe. Są nimi: " << (-b-sqrt(delta))/2*a <<
" oraz " << (-b+sqrt(delta))/2*a;
}
getch();
return 0;
}
Kod: Zaznacz cały
const double EPS = 0.0000000001; // dokładność porównania z zerem
if(fabs(delta) < EPS){
// możemy przyjąć, że delta jest zerem
}
Nagłówek math.h pochodzi z czasów biblioteki języka C, w języku C++ mamy nowe nagłówki i odpowiednikiem math.h jest cmath. Dlatego właśnie jego należy użyć. Odnośnie conio.h, to jest to nagłówek niebędący w standardzie biblioteki, więc dołączanie go tylko po to, aby użyć funkcji getch() nie jest najlepszym pomysłem. Żeby nie było - to nie jest błąd. Piszę o tym tylko po to, aby wskazać, że można użyć czegoś zamiast getcha (np. wczytywania zwykłego znaku przy użyciu cin), nic przez to nie tracąc, a mając kod, który teoretycznie ma skompilować się wszędzie.Jako że to C++, zatem nie math.h, tylko cmath. conio.h też lepiej nie używać, ale to szczegół.
Liczby zmiennoprzecinkowe to nie są liczby rzeczywiste - poczytaj o ich reprezentacji i zrozumiesz, że nie da się przy użyciu floata/double'a przedstawić każdej liczby rzeczywistej (pomijam już oczywiście kwestię ograniczonej liczby bitów, co powoduje niemożność zapisania liczb bardzo dużych i bardzo małych). Przykładowo liczby \(\displaystyle{ 0.1}\) nie da się zapisać w systemie binarnym w postaci skończonej. Dlatego porównywanie liczb zmiennoprzecinkowych operatorem == może nam dać zły wynik, więc powinno się to robić inaczej.porównywanie zmiennej typu float do zera poprzez operator ==. Tak się tego nie robi Należy pamiętać, że specyfika liczb zmiennoprzecinkowych sprawia, że możemy potraktować jako zero coś, co zerem nie jest (i na odwrót)
Za bardzo nie ma czego parafrazować Wszystko zależy od architektury procesora, ale na normalnych pecetach zazwyczaj double jest szybszy (i oczywiście dokładniejszy). Nie jest to regułą, dlatego na przykład na konkursach algorytmicznych uczestnicy często na samym początku puszczają testerce jakiś spreparowany test, aby sprawdzić, który typ danych działa najszybciej. Czasami jest to double, czasami long double, różnie z tym bywa.Swoją drogą do takich obliczeń lepiej jest używać typu double. Jest o wiele dokładniejszy, a wbrew pozorom zazwyczaj jest też szybszy.