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

[C++] Zaokrąglanie liczb w cmath

Object Storage Arubacloud
0 głosów
660 wizyt
pytanie zadane 21 kwietnia 2019 w C i C++ przez Ebay_05 Początkujący (400 p.)
otagowane ponownie 21 kwietnia 2019 przez Ebay_05

Dobry wieczór i wesołych świąt (nieco spóźnionych, ale zawsze coś ;) ),

mam problem z powyższą biblioteką, gdyż próbuję zaokrąglić liczby w górę, ale one po prostu domyślnie obcinają cyfry po przecinku. Używam do tego funkcji ceil(). Jest to zadanie "obżartuchy" ze spoja.

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int n, x, y, v[10000],suma=0;
    float ciastka[10000],opak;

    cin>>n; //testy

    for(int i=1; i<=n; i++)
    {
        cin>>x>>y;
        //ilosc obzartuchow do 10.000
        //liczba ciastek w opakowaniu d0 1.000.000

        for(int i=1; i<=x; i++)
        {
            cin>>v[i];
            ciastka[i]=86400/v[i];
            suma+=ciastka[i];
        }
        
        opak=suma/y;
        cout<<ceil(opak)<<endl;
    }
    return 0;
}

 

Z góry dzięki za pomoc :)

1 odpowiedź

+2 głosów
odpowiedź 21 kwietnia 2019 przez criss Mędrzec (172,590 p.)
wybrane 21 kwietnia 2019 przez Ebay_05
 
Najlepsza

Linia 26: obie zmienne na których został zastosowany operator dzielenia są typu całkowitego, więc wykonujesz dzielenie całkowite. Tj.: wyrażenie suma/y jest typu int (wynik dzielenia suma/y jest typu int), który następnie konwertowany jest na typ float.

Jak naprawić? Jeśli co najmniej jeden argument dzielenia jest typu zmiennoprzecinkowego, to drugi też zostanie przekonwertowany na typ zmiennoprzecinkowy i wykona się dzielenie liczb pseudo-rzeczywistych. Zatem np.: static_cast<float>(suma)/y. Nieoczekiwane działanie w ogóle nie dotyczy funkcji ceil.

komentarz 21 kwietnia 2019 przez Ebay_05 Początkujący (400 p.)

Wielkie dzięki! Naprawione laugh

komentarz 22 kwietnia 2019 przez Ebay_05 Początkujący (400 p.)

Mam jeszcze problem z tym, że program dobrze zaokrągla pierwszy zestaw testowy ze spoja (wychodzi 7,2 opakowań ciastek i zaokrągla do 8), ale drugi, co jest dziwne próbuje zaokrąglić całe 2 opakowania do 3. Zamieniłam typ sumy i y na float.

 

Zadanko:

https://pl.spoj.com/problems/GLUTTON/

komentarz 22 kwietnia 2019 przez criss Mędrzec (172,590 p.)
Jesteś pewna, że do ceil trafia 2.0 a nie np. 2.00000001?
komentarz 22 kwietnia 2019 przez Ebay_05 Początkujący (400 p.)

@Criss, wg tego co napisałam powinno obliczyć równo 2

komentarz 22 kwietnia 2019 przez criss Mędrzec (172,590 p.)
Niektóre wartości nie są reprezentowalne w formacie zmiennoprzecinkowym (duże całkowite i niektóre niecałkowite - np. takie które binarnie mają rozwinięcie okresowe). Nie mówie, że wartość 2 nie jest reprezentowalna (bo jest), ale być może któraś z wartości na podstawie której liczyłaś wynik.

Podobne pytania

0 głosów
1 odpowiedź 167 wizyt
pytanie zadane 18 lipca 2019 w Java przez BleBlock Użytkownik (600 p.)
0 głosów
0 odpowiedzi 619 wizyt
pytanie zadane 16 lutego 2021 w C i C++ przez Ashiro Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 912 wizyt
pytanie zadane 2 października 2019 w C i C++ przez Ezzadanko5head Nowicjusz (180 p.)

92,568 zapytań

141,424 odpowiedzi

319,632 komentarzy

61,956 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!

...