Problem z operacjami matematycznymi....Petle

0

Witam,
Mam przykładowo do narysowania funkcję, gdzie użytkownik ma możliwość zdefiniowania odkąd dokąd ta funkcja ma być narysowana oraz ilość punktów przez które ma przechodzić. Teraz przykładowo definiuję double i i daję pętlę

 for(i=xpocz; i<=xkon;i=i+krok)

gdzie krok to tak jak mówiłem wcześniej jest to odległość pomiędzy dwoma punktami wykresu. I teraz np: xpocz = 3, xkon=4, krok 0,01. teoretycznie "i" powinno się zmieniać od 3 do 4 co 0,01...tak nie jest no mam 4,02000000012 <---wtf?

0

Czyli rozumiem, że w grę wchodzi tylko i wyłącznie zaokrąglanie?Tylko jak ustawić ilość liczb do jakiej chcę zaokrąglić...gdyby to było z góry narzucone to nie problem...w tym przypadku narzucone jest przez osobą podającą krok...może to być 0,1 lub 0,001 a nawet 0,0000001. Jak zrobić żeby system sprawdzał ile jest miejsc po przecinku? a potem do zmiennej przypisywał ilość liczb po przecinku a potem bym dopisywał Math.Round(wartość, ilość po przecinku)...

0

nie piszę się
h=(b-a)/n; for(x=a; x<=b; x += h) ....
tylko
h=(b-a)/n; for(i=0; i<n; i++) { x= a + i*h; ....

0

Może i się nie pisze ale wytłumacz mi jedną sprawę. Jak podasz b, a oraz krok h, i wyjdzie Ci n = 9,5 to co wtedy?

0

W grę wchodzi różnica między systemami liczbowymi komputerów i ludzi. Tak, jak my nie potrafimy dokładnie określić ile wynosi 1/3 w zapisie dziesiętnym, tak samo komputery nie potrafią dokładnie określić ile wynosi 1/10 w zapisie binarnym.
Może w tym przypadku dałoby się użyć typu decimal, który operuje na liczbach dziesiętnych? Albo pętla niech operuje na int, a w działaniach wewnątrz pętli dziel i przez 10, 100, czy 10000 w zależności od tego, czego chce użytkownik.

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