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

Problem z kodem C++

Object Storage Arubacloud
0 głosów
1,322 wizyt
pytanie zadane 16 listopada 2016 w C i C++ przez stempels Początkujący (380 p.)
Witam!

Usiłuję napisać program od jakiegoś czasu, który liczyć będzie długość albo częstotliwość fali elektromagnetycznej. Niestety kiedy wpisuję jakąś większą liczbę np. 75000000000000 i dzielę przez prędkość światła (3*10^8 m/s) to program albo się zacina, albo pokazuje się napis "inf". Co to oznacza? Czy mógłby ktoś pomóc mi ulepszyć kod, aby działał jak należy na dużych liczbach. Proszę o pomoc :)

ps. jeszcze nie pokazuje liczb ujemnych oraz ułamków dziesiętnych

http://wklej.org/id/2955044/

3 odpowiedzi

0 głosów
odpowiedź 16 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
wybrane 16 listopada 2016 przez stempels
 
Najlepsza

W przypadku tak duzych (tak długich) liczb wychodzisz poza ich zakres w reprezentacji (stąd komunikat o uzyskaniu końca zakresu 'inf'). Lepiej zamiast inta użyć double lub long double, ewentualnie, jeśli wartość zmieści się w przedziale to long long int. ostatnia tabelka na stronie przedstawia zakres różnych int-ów

komentarz 16 listopada 2016 przez stempels Początkujący (380 p.)
jestem zielony, a ten program pisałem wzorując się na innym... mógłbyś pokazać?
komentarz 16 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
w miejscu gdzie deklarujesz zmienną y zamiast 'int y' napisz 'long long int'. Wtedy możesz podać wartości do 9 223 372 036 854 775 807 i nie powinieneś napotkać ostrzeżenia.
komentarz 16 listopada 2016 przez stempels Początkujący (380 p.)
dopisałem, teraz rzeczywiście z dużymi liczbami nie ma kłopotu, ale jak wpisuję np. 0,00007 to nadal "inf"...
komentarz 16 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
edycja 16 listopada 2016 przez lnkoc
w przypadku podanym przez Ciebie nie powinno być liczb innych niż całkowite. Jeśli chcesz podawać liczby ułamkowe to należałoby zmienić y na double, a przypadku kiedy używasz naprawdę dużych liczb to powinno się używać 'long double' ponieważ tylko te liczby reprezentują liczby zmiennoprzecinkowe o względnie dużej dokładności.

A tak przyglądając się Twojemu kodowi powinieneś nieco zmieć aby nie używać wezwania funkcji main() w pożądanym momencie. Funkcje (poza main) powinny być wywoływane np. z jakiejś nieskończonej pętli, gdzie warunkiem zakończenia powinna być jakaś wartość 'bool' ustawiana po podaniu jakiejś wartości do zmiennej.
komentarz 16 listopada 2016 przez stempels Początkujący (380 p.)
mam błąd i nie chce mi uruchomić, po dopisaniu "long double" zamiast" "long long" wyświatla mi: "11|error: two or more data types in declaration of 'y'"
komentarz 16 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
a gdy spróbujesz samo double?

BTW Z jakiego środowiska programistycznego korzystasz?
komentarz 16 listopada 2016 przez stempels Początkujący (380 p.)
samo double też...

z Code::Blocks
komentarz 16 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
A może spróbuj nie używać zmiennej globalnej y tylko w każdej z funkcji z osobna przed cin << y; napisz:

double y;

ewentualnie:

long double y;
komentarz 16 listopada 2016 przez stempels Początkujący (380 p.)
dzięki działa
0 głosów
odpowiedź 16 listopada 2016 przez unknown Nałogowiec (39,560 p.)
Używaj long long do przechowywania liczb
0 głosów
odpowiedź 16 listopada 2016 przez jakub.kaliszewski Obywatel (1,200 p.)
Zmień typ danych na double lub nawet long double. Jest to fizyka, zastanów się też czy Twoja częstotliwość może być ujemna, jeśli nie możesz to wykorzystać i "zmarnowany" zakres typu wykorzystać, więcej tu masz:
https://pl.wikibooks.org/wiki/C/Zmienne#signed_i_unsigned

Podobne pytania

+1 głos
1 odpowiedź 312 wizyt
pytanie zadane 28 lipca 2017 w C i C++ przez michal12334 Obywatel (1,510 p.)
0 głosów
0 odpowiedzi 249 wizyt
pytanie zadane 2 maja 2017 w C i C++ przez TheFeniks Gaduła (4,690 p.)
0 głosów
2 odpowiedzi 186 wizyt
pytanie zadane 25 kwietnia 2017 w C i C++ przez krysita Początkujący (280 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...