logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zaokrąglić wartość liczby E do 'n' miejsc po przecinku w C++?

rozik 19 Lis 2008 22:29 5775 6
REKLAMA
  • #1 5760141
    rozik
    Poziom 13  
    Posty: 117
    Pomógł: 5
    Ocena: 18
    Witam mam mały program z programikiem. Muszę zaokrąglić liczbę E o 'n' miejsc po przecinku. Program ma mniej więcej wyglądać tak:
    
    Wpisz liczbe n 3
    e = 2
    e = 2.5
    e = 2.666666666666666519
    
    A oto liczba e z biblioteki math
    e = 2.718281828459045091
    

    Mi wychodzi coś takiego:
    
    
    podaj liczbe n: 3
    2
    2.0
    2.00
    Wartosc liczby 'e' wynosi:2.71828183
    Aby kontynuować, naciśnij dowolny klawisz . . .
    

    a mój kod źródłowy wygląda następująco:
    
    #include <iostream>
    #include <conio.h>
    #include <math.h>
    #include <iomanip.h>
    using namespace std;
    int main()
    
    {
    int a,n,i;
    float b;
    cout<<"podaj liczbe n: ";
    cin>>n;
    a=1;
    i=0;
    for (a=1 ;a<=n;a++)
    {
    
    cout<<fixed<<setprecision(i)<<floor(M_E)<<endl;
    i=i+1;
    
    }
    
    cout<<setprecision(8)<<"Wartosc liczby 'e' wynosi:"<<M_E<<endl;
    
    
    system("pause");
    }
    

    Ktoś mi może pomóc jak to zmodyfikować, żeby było poprawnie, bo już mi witki opadają...
    Z góry dzięki za pomoc.
  • REKLAMA
  • REKLAMA
  • #3 5760177
    rozik
    Poziom 13  
    Posty: 117
    Pomógł: 5
    Ocena: 18
    wiem co zwraca funkcja floor, tak samo wiem o co chodzi z round i ceil, chyba po prostu źle rozumuje, jak zdejmę floora to też nie jest to co trzeba, bo na początku wypisze mi 3 potem 2,7 potem 2,71 itd itd... a to nie jest to co mi trzeba...
  • REKLAMA
  • #4 5760188
    szpila_forever
    Poziom 15  
    Posty: 185
    Pomógł: 7
    Ocena: 4
    potraktuj liczbę jak stringa.
    odwołuj się jak do tablicy.

    zaczynasz od końca ( w sensie jak najdalej od przecinka:) )
    bierzesz n+1 liczb po przecinku


    Jeśli ostatni jest większy niż 5 to to zapamiętujesz ( jak jest mniejszy to wyświetlasz bo i tak się nic nie zmieni).

    jeśli był większy to :
    dodajesz do tej liczby 0,1 x 10^n gdzie n jest równe liczbie miejsc po przecinku.
    robisz to tak jak pisemnie lub rzutujesz stringa, z tym że sposób z "dodawaniem pisemnym" jes. bardziej skalowalny


    powodzenia
  • #5 5760255
    Dr.Vee
    VIP Zasłużony dla elektroda
    Posty: 1784
    Pomógł: 307
    Ocena: 76
    rozik, musisz chyba lepiej zdefiniować o co Ci chodzi. Liczby 2, 2+1/2, 2+2/3 nijak nie przybliżają e do 0, 1, czy 2 cyfr po przecinku.

    szpila_forever, opisałeś (błędnie) zwykłe zaokrąglanie...

    Edit: Liczby w przykładzie to kolejne aproksymacje rozwinięcia liczby e zgodnie z $$e = \lim_{n \to \infty} \sum_0^n \frac{1}{n!}$$

    Tak jak myślałem nie ma to nic wspólnego z zaokrąglaniem...

    Pozdrawiam,
    Dr.Vee
  • REKLAMA
  • #6 5760288
    rozik
    Poziom 13  
    Posty: 117
    Pomógł: 5
    Ocena: 18
    jak to dokładniej zdefiniować nie wiem...
    facet na zajęciach kazał zrobić coś takiego ... jak pokazałem na górze, nie zgadzam się z jego mongolską teorią zaokrąglania, ale niestety jak nie zrobię tak jak on chce to mi nie zaliczy, nie mam pojęcia jak mu się wzięło 2,5 z liczby E kiedy ona ma 2.71828183... to treść zadania ...
    "Obliczy wartość liczby E z podaną dokładnością n.
    Jak zaokrąglić wartość liczby E do 'n' miejsc po przecinku w C++?
    Pamiętamy również, że n! = (n-1)! n
    Program powinien poprosić o podanie wartości n, a następnie wyświetlić wartość liczby e dla kolejnych przybliżeń od 1 do n.
  • #7 5760372
    szpila_forever
    Poziom 15  
    Posty: 185
    Pomógł: 7
    Ocena: 4
    Dr.Vee : dziękuje za uwagę - błąd poprawiony.
    Algorytm podałem taki ponieważ wywnioskowałem z pierwszego posta że właśnie o zwykłe zaokrąglanie chodzi.

    rozik: W Twoim zadaniu nie chodzi o zaokrąglanie tylko o wyznaczenie wartości ( zakłądam bo nie widzę obrazka):
    Dr.Vee napisał:
    [b]$$e = \lim_{n \to \infty} \sum_0^n \frac{1}{n!}$$



    z dokłądnością do n cyfr po przecinku

    tu masz trochę na ten temat

    http://wazniak.mimuw.edu.pl/index.php?title=MN03LAB

Podsumowanie tematu

✨ Dyskusja dotyczy problemu zaokrąglania liczby E do n miejsc po przecinku w języku C++. Autor próbuje uzyskać kolejne przybliżenia liczby E, wyświetlając wartości z rosnącą precyzją, jednak stosowanie funkcji floor() nie daje oczekiwanych rezultatów. Wskazano, że floor() zwraca największą liczbę całkowitą nie większą niż argument, co nie jest odpowiednie do zaokrąglania wartości zmiennoprzecinkowych. Zaproponowano podejście polegające na traktowaniu liczby jako łańcucha znaków i implementacji zaokrąglania poprzez analizę cyfr po przecinku oraz dodawanie odpowiedniej wartości w zależności od ostatniej cyfry. W rozmowie pojawiła się także uwaga, że zadanie nie dotyczy klasycznego zaokrąglania, lecz wyznaczania kolejnych przybliżeń liczby E zgodnie z rozwinięciem szeregowym (sumą kolejnych wyrazów), co tłumaczy pojawiające się wartości takie jak 2, 2.5, 2.6666 itd. Podano linki do materiałów wyjaśniających funkcję floor oraz metody obliczania liczby E z zadaną dokładnością. Wskazano, że do wyświetlania wartości z określoną precyzją można użyć manipulacji strumieniem (fixed, setprecision), ale sam sposób obliczania wartości E wymaga implementacji sumowania kolejnych składników szeregu, a nie prostego zaokrąglania.
Wygenerowane przez model językowy.
REKLAMA