@FreakingAwesome: Tak na poważnie, poczytaj o wbudowanej niedokładności typów zmiennoprzecinkowych. Zrób na intach fora i skaluj w środku, jeśli potrzebujesz koniecznie tego ułamka.
@FreakingAwesome: Wyskoczyła ci bardzo mała liczba bliska zeru wypisana w notacji wykładniczej. Po prostu float jest niedokładny i nie zawsze wyjdzie ci równe zero.
@FreakingAwesome: a dlaczego napisala petle w ktorej liczbe iteracji zdefiniowalas jako rzeczywista? Czy liczba iteracji, ktora chcialas wykonac nie byla calkowita?
@FreakingAwesome: Temat wałkowany milion razy, następnym razem użyj opcji szukaj. Poza tym to forum nie jest dla ludzi bez chociaż minimalnej wiedzy. Jak nie umiesz podstaw to nawet nie bierz się za programowanie. Niech już wprowadzą tą ustawę, że programować będą mogły tylko osoby z uprawnieniami. Masz szczęście, że mam dzisiaj dobry humor i skończy się tylko na warnie. ZAMYKAM
Wyskoczyła ci bardzo mała liczba bliska zeru wypisana w notacji wykładniczej.
@Drakii: To co mu wyskoczyło to "ujemne zero". @FreakingAwesome: Na studiach informatycznych tego uczą. Musisz wziąć pod uwagę niedokładność liczb zmiennoprzecinkowych albo pracować na innym systemie liczbowym np na intach.
@push3k-pro: hej, dzieki za odpowiedz :) Wlasnie ten przyklad pochodzi ze skryptu do przedmiotu "Programowanie", ale skrypt ma chyba z 10 lat (albo więcej), wiec moze stad taki babol ( ͡°ʖ̯͡°), pic rel:
@FreakingAwesome: Z dodawaniem wszystko ok, przy floatach możesz użyć printf("%.2f\n", x); który wypisze tylko "n" (w tym przypadku 2) miejsc po przecinku, zamiast std::cout, żeby uniknąć notacji wykładniczej i będzie gitówa.
@FreakingAwesome: bo tak naprawdę nie dodajesz 0.1 a coś bardziej jak 0.1000000000000000000001 i w konsekwencji gdy dochodzisz do zera masz tam dodaną jakąś resztę zamiast równo 0
Zapis o "zabezpieczaniu się" polega na tym, że zamiast 1.5 zrobili 1.55. Więc tak, pętla się skończy w odpowiednim momencie ale cout będzie pluł takie właśnie liczby jak widzisz.
https://codeshare.io/29LQmX
#cpp #naukaprogramowania
źródło: comment_1589368162lbSO2TLYobvThXAB3cmuZ6.jpg
PobierzCzy liczba iteracji, ktora chcialas wykonac nie byla calkowita?
źródło: comment_1589370541OELm5QMDFEaTTnajFFszr7.jpg
Pobierz-
Piszę poprawnie po polsku
INTEL CORE 2 DUO 2X2,3 GHz, GeForce 8800
@Drakii: To co mu wyskoczyło to "ujemne zero".
@FreakingAwesome: Na studiach informatycznych tego uczą. Musisz wziąć pod uwagę niedokładność liczb zmiennoprzecinkowych albo pracować na innym systemie liczbowym np na intach.
Komentarz usunięty przez autora
źródło: comment_1589377969Hcyh6sF8VZkg7dhnKeoz3o.jpg
PobierzZ dodawaniem wszystko ok, przy floatach możesz użyć
printf("%.2f\n", x);
który wypisze tylko "n" (w tym przypadku 2) miejsc po przecinku, zamiast std::cout, żeby uniknąć notacji wykładniczej i będzie gitówa.
@push3k-pro: Sam widzisz po notacji że to nie jest dokładnie zero tylko jakaś bardzo mała ujemna liczba.
Zapis o "zabezpieczaniu się" polega na tym, że zamiast 1.5 zrobili 1.55. Więc tak, pętla się skończy w odpowiednim momencie ale cout będzie pluł takie właśnie liczby jak widzisz.