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

Typy zmiennych C++

0 głosów
1,822 wizyt
pytanie zadane 7 września 2017 w C i C++ przez qlucha Obywatel (1,790 p.)

Zastanawiają mnie pewne dane które znalazłem w jednym z kursów cpp, które określają "Zakres Wartości" dla zmiennych. 

http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Pojecie-zmiennej-i-podstawowe-typy-danych/11

Jest tam zapis : dla zmiennej long double  :

long double 8 1.7E +/- 308 (15 cyfr)

Ale w jednym z odcinków programowania pana M.Zelenta program wyznacza max liczbę dla tej zmiennej w postaci 9.28565e+4831  w zapise naukowym . 

Z tych zapisów wnioskuję ,że maksymalną liczbę jaką moge wyznaczyć z podanej tabeli dla zmiennej long double jest liczba z ilościa 309 cyfr maksymalnie ,(nie chodzi mi o to jaką wartość reprezentuje ta liczba ale  z ilu cyfr max składa sie ta liczba ).

Natomiast program wyznacza liczbę  9.2e +4831 , czyli składa się ona z max 4832 cyfr i pozniej przekroczymy zakres zmiennej i program się wysypie. 

Czy ja coś zle zrozumiałem ??? Proszę o pomoc i wyrozumiałość w tym temacie , dzieki. 

 

 

 

1 odpowiedź

+1 głos
odpowiedź 7 września 2017 przez niezalogowany
wybrane 8 września 2017 przez qlucha
 
Najlepsza

Cytując ze strony którą podałeś:

Powyższe rozmiary danych są podane dla 32-bitowego kompilatora Visual C++. Jeśli chcesz sprawdzić ile w rzeczywistości zajmuje określony typ danych dla Twojego kompilatora, wystarczy napisać prosty program i wykorzystać w nim słowo kluczowe sizeof. Przykładowo, dla kompilatora GNU g++ rozmiar typu long double wynosi 12 bajtów, a nie 8 bajtów jak w Visual C++. 

Maksymalna wartość jaką może pomieścić long double jest zależna od kompilatora. Dla domyślnego kompilatora Visual Studio jest to 1.7E +/- 308 (15 cyfr). Dokładnie to samo co dla double. Na innym kompilatorze long double może mieć rozmiar 12 bajtów (patrz w googlu long double 80-bit) i wtedy pomieści znacznie większe liczby: 

Zakres ±1,1 × 10^4932 Precyzja 19...20cyfr
komentarz 8 września 2017 przez qlucha Obywatel (1,790 p.)

Dzieki za odpowiedz,  sprawdzałem prostym programem  ile bajtów rezerwuje u mnie zmienna long double i jest to 12 bajtów, i pracuje na kompilatorze GNU g++ .

Pytam dlatego aby zrozumiem to raz a dobrze, ponieważ w kursie na jednym z odcinków Pan M.Zelent podaje wzór do obliczenia z którego wynika jaką maksymalną liczbę możemy przypisać do danej zmiennej dziesiętnie i jest to prosty wzór:

-2^(n-1).....2^(n-1)-1             n-bit 

 i dla int wzór jest poprawny ale już dla long double wychodzi błędny wyniki i założenie .blush

komentarz 8 września 2017 przez niezalogowany
Tylko wiesz ten wzór to raczej podchodzi tylko pod typy całkowitoliczbowe, bo zmiennoprzecinkowe rządzą się innymi prawami (inne zarządzanie bitami - podstawa, wykładnik, mantysa itd.).
komentarz 8 września 2017 przez niezalogowany

Dla nich jest taka zależność.

komentarz 8 września 2017 przez qlucha Obywatel (1,790 p.)

tez własnie o tym pomyslałem ale musiałem się upewnić , że ten wzór odnosi cie do zmiennych przechowujących liczby całkowite  a  zmiennoprzecinkowe rządzą się innymi prawami .

Teraz już wiem na 100% i dzięki za pomoc ,  właśnie trafiłem na polską strone opisującą ten problem 2 minuty wcześniej czytałem angielską stronę , trudno trafić samemu na dobre materiały o programowaniu dlatego pytam tutaj , bo wiem ,że tutaj skupiają się ludzie którzy potrafią naprawde programować a ja wiem ,że jestem amatorem .smiley.

 

Jeszcze jedna rzecz która mnie ciekawi ze strony 

http://eduinf.waw.pl/inf/alg/006_bin/0027.php

long double 80b - 10B          Zakres ±1,1 × 104932         Precyzja 19...20cyfr

 

natomiast u mnie long double rezerwuje 12B a zakres sie nie zwieksza tylko jest taki sam jak dla 10B , obawiam się ,że zostane zrugany za to pytanie ale musiałem je zadać ,żeby wiedzieć gdzie kopać i czego się nauczyć . Dzieki za odpowiedz , 

 

komentarz 8 września 2017 przez niezalogowany
Nawet z tej strony brałem tabelkę - mogłem też wkleić link, ale widzę poradziłeś sobie ;)
komentarz 8 września 2017 przez qlucha Obywatel (1,790 p.)

smileyyes  dzieki za pomoc.

Podobne pytania

0 głosów
3 odpowiedzi 1,395 wizyt
pytanie zadane 22 stycznia 2017 w C i C++ przez Marchewka900 Bywalec (2,970 p.)
0 głosów
1 odpowiedź 2,034 wizyt
pytanie zadane 8 listopada 2016 w Java przez itcloud Gaduła (3,380 p.)
0 głosów
1 odpowiedź 715 wizyt
pytanie zadane 23 maja 2018 w C i C++ przez Agnes Użytkownik (990 p.)

93,758 zapytań

142,716 odpowiedzi

323,363 komentarzy

63,355 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.

...