• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zaokrąglanie liczb c++

0 głosów
1,329 wizyt
pytanie zadane 2 października 2019 w C i C++ przez Ezzadanko5head Nowicjusz (180 p.)

Witam! Mam taki problem: mam napisać program wyliczający bardzo dużą ilość liczb rzeczywistych pomiędzy dwiema liczbami rzeczywistymi ( Zbiór liczb rzeczywistych jest gęsty więc jest ich nieskończoność). Używam zmiennych long double więc powinno mi wypisywać 19-20 cyfr po przecinku ale po 5 cyfrach zaczyna mi zaokrąglać. Dowiedziałam się że muszę ustawić zaokrąglanie liczb w kodzie ale nigdzie nie mogę znaleźć jak to zrobić. Z góry dziękuje za wszystkie odpowiedzi.

#include <iostream>

using namespace std;

long double mniejsza;
long double wieksza;

int main()
{
    cout << "Podaj mniejsza z dwoch liczb rzeczywistych: " << endl;
    cin>>mniejsza;
    cout<<"Podaj wieksza z dwoch liczb rzeczywistych: "<<endl;
    cin>>wieksza;
 for(int i=1; i<=100000; i++)
{
    mniejsza = (mniejsza+wieksza)/2;
    cout<<mniejsza<<endl;
}

    return 0;

}

Po odpaleniu dzieje się coś takiego:

Podaj mniejsza z dwoch liczb rzeczywistych:
1
Podaj wieksza z dwoch liczb rzeczywistych:
2
1.5
1.75
1.875
1.9375
1.96875
1.98438
1.99219
1.99609
1.99805
1.99902
1.99951
1.99976
1.99988
1.99994
1.99997
1.99998
1.99999
2
2
2
2
2
2
2
2
2

 

I już do końca lecą dwójki.

 

2 odpowiedzi

+1 głos
odpowiedź 2 października 2019 przez tkz Nałogowiec (42,040 p.)

Przekleństwo liczb zmiennoprzecinkowych...

Głównie rozchodzi się o precyzję, a dokładnie o jej brak co jest bardzo powszechne wśród liczb po przecinku. Mantysa long doubla to 16 bitów, które musisz ustawić.  https://stackoverflow.com/questions/22515592/how-to-use-setprecision-in-cimage

 

komentarz 2 października 2019 przez Ezzadanko5head Nowicjusz (180 p.)
A jest może jakiś sposób na uzyskanie jeszcze wiekszej precyzji niż przy long double?
komentarz 2 października 2019 przez tkz Nałogowiec (42,040 p.)
Pewnie przez zewnętrzne biblioteki.
komentarz 2 października 2019 przez tkz Nałogowiec (42,040 p.)
0 głosów
odpowiedź 2 października 2019 przez Munvik Dyskutant (9,350 p.)
Spróbuj (mniejsza+wieksza)/2.f;
komentarz 2 października 2019 przez niezalogowany
edycja 2 października 2019

tu na forum był temat o stringach dla dużych liczb .

https://eduinf.waw.pl/inf/utils/001_2008/0119.php

cyfr znaczących - nie po przecinku (przed i po przecinku w sumie).

edit :: long double 19 cyferek poprawnych reszta to wymysł komputera(ale u mnie na kompie jak policzyłem to było tylko 16, dla long double)

Podobne pytania

0 głosów
0 odpowiedzi 1,356 wizyt
pytanie zadane 16 lutego 2021 w C i C++ przez Ashiro Nowicjusz (210 p.)
0 głosów
1 odpowiedź 1,130 wizyt
pytanie zadane 21 kwietnia 2019 w C i C++ przez Ebay_05 Początkujący (400 p.)
0 głosów
1 odpowiedź 674 wizyt
pytanie zadane 23 września 2020 w PHP przez Kacperhehe Bywalec (2,930 p.)

93,786 zapytań

142,748 odpowiedzi

323,418 komentarzy

63,391 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...