-
October 2nd, 2011, 05:08 AM
#1
0 isn't 0 in C++ math
OK, i have a script, which calculate Y=1/(C-A). C is input, A is intetrval [Ap;Ag] with step Az;
And i have one problem, when c=2, A[-1.5;2.5] with step 0.1, when i want to say that 0 isn't possible in 1/0, the program colculate me: Y = -2.1e+06 . Programm is not English language, sorry. Problem in answer line 36.
Code:
/*
*/
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
int main ()
{
float y, c, ap, az, ag;
cout << "Iveskite kintamojo C reiksme.\n";
cin >> c; //įvedame C reikšmę
do {
cout << "Iveskite intervalo pradzia ir gala.\nPradzia ir galas sutapti negali!\n";
cin >> ap >> ag; //įvedame intervalo pradžią ir galą
} while (ap == ag); //išsireikalaujame, kad intervalo pradžia ir galas nesutaptų
do {
cout << "Iveskite intervalo kitimo zingsni, kuris nelygus 0.\n";
cin >> az; //įvedame intervalo kitimo žingsnį
} while (az == 0.0); //išsireikalaujame, kad intervalo kitimo ˛ingsnis būtų nelygus 0
if (ag > ap && az > 0.0) { //jei intervalas didėjantis IR žingsnis DIDESNIS už 0, skaičiuojame
cout << setfill('-') << setw(58) << "-" << endl;
cout << setfill(' ') << setw(8)<<"Sprendinio nr. " <<"| "<<"Atsakymas\n";
cout << setfill('-') << setw(58) << "-" << setfill(' ') <<endl;
for (float z = 1.0, a = ap; a <= ag; a += az) {
if (a == c) { //jei vardiklis lygus 0
cout << setfill(' ') << setw(14) << z << ". ";
cout << "Kai A = " << a <<", o " << c << " - " << a <<" = 0, apskaiciuoti\nnegalima, nes dalyba is 0 negalima.\n";
}
else {
y = 1.0 / (c - a); //skaičiuojame
cout << setfill(' ') << setw(14) << z << ". " << "Y = " << setprecision(3) << y << endl;
}
z++; //prisideame vienetuką prie sprendinio nr.
}
}
if (ag < ap && az < 0.0) { //jei intervalas mažėjantis IR žingsnis MAŽESNIS uz 0
cout << setfill('-') << setw(58) << "-" << endl;
cout << setfill(' ') << setw(8)<<"Sprendinio nr. " <<"| "<<"Atsakymas\n";
cout << setfill('-') << setw(58) << "-" << setfill(' ') <<endl;
for (float z = 1.0, a = ap; a >= ag; a += az) {
if (a == c) { //jei vardiklis lygus 0
cout << setfill(' ') << setw(14) << z << ". ";
cout << "Kai A = " << a <<", o " << c << " - " << a <<" = 0, apskaiciuoti\nnegalima, nes dalyba is 0 negalima.\n";
}
else {
y = 1.0 / (c - a); //skaičiuojame
cout << setfill(' ') << setw(14) << z << ". " << "Y = " << setprecision(3) << y << endl;
}
z++; //prisideame vienetuką prie sprendinio nr.
}
}
if (ag > ap && az < 0.0) { //jei intervalas didėjantis IR žingsnis MAŽESNIS uz 0
cout << setfill('-') << setw(58) << "-" << endl;
cout << "Apskaiciuoti negalime,\nnes intervalas didejantis,\no zingsnis mazejantis.\n";
}
if (ag < ap && az > 0.0) { //jei intervalas mažejantis IR žingsnis DIDESNIS už 0
cout << setfill('-') << setw(58) << "-" << endl;
cout << "Apskaiciuoti negalime,\nnes intervalas mazejantis,\no zingsnis didejantis.\n";
}
cout << setfill('-') << setw(58) << "-" << setfill(' ') <<endl;
system ("pause");
return 0;
}
Code:
Iveskite kintamojo C reiksme.
2
Iveskite intervalo pradzia ir gala.
Pradzia ir galas sutapti negali!
-1.5
2.5
Iveskite intervalo kitimo zingsni, kuris nelygus 0.
0.1
----------------------------------------------------------
Sprendinio nr. | Atsakymas
----------------------------------------------------------
1. Y = 0.286
2. Y = 0.294
3. Y = 0.303
4. Y = 0.313
5. Y = 0.323
6. Y = 0.333
7. Y = 0.345
8. Y = 0.357
9. Y = 0.37
10. Y = 0.385
11. Y = 0.4
12. Y = 0.417
13. Y = 0.435
14. Y = 0.455
15. Y = 0.476
16. Y = 0.5
17. Y = 0.526
18. Y = 0.556
19. Y = 0.588
20. Y = 0.625
21. Y = 0.667
22. Y = 0.714
23. Y = 0.769
24. Y = 0.833
25. Y = 0.909
26. Y = 1
27. Y = 1.11
28. Y = 1.25
29. Y = 1.43
30. Y = 1.67
31. Y = 2
32. Y = 2.5
33. Y = 3.33
34. Y = 5
35. Y = 10
36. Y = -2.1e+06
37. Y = -10
38. Y = -5
39. Y = -3.33
40. Y = -2.5
41. Y = -2
----------------------------------------------------------
Last edited by justutiz; May 19th, 2013 at 01:05 PM.
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|