Int czy float?

0

Jak zrobic zeby program sprawdzal czy podalem int czy float?

0

Ogólnie mogłbyś prawdzać czy liczba jest całkowita, ale przez to, że float jest zmiennoprzecinkowa byś raczej zawiódł by się na tym. Może wczytaj do char'a*/string'a i sprawdzaj czy jest kropka?
PS. A potem skonwertuj do int'a/float'a.

0
  1. Wczytać do double Podano.
  2. Jeżeli (int)Podano==Podano oznacza to że podał int.
0

Można też tak:

if ( liczba == (float)liczba ) => zmiennoprzecinkowa

if ( liczba == (int)liczba ) => całkowita

... przez rzutowanie.

0

A jak użytkownik wpisał 23.000, to wpisał liczbę typu int, czy typu float?

0

Jeżeli po przecinku są same zera, to liczba jest całkowita, nieważne czy użytkownik uwzględnił przecinek.

0
    float x;
    float p;

    cin >> x;

    p = modff(x, &p);
    cout << "p = " << p << "\nx = " << x << "\n";

    (p == 0) ? cout << "liczba calkowita" : cout << "liczba rzeczywista";

może tak? Oczywiście nastąpi przekłamanie gdy zostanie wprowadzona za duża ilość cyfr po przecinku.

0

Skoro dla niektórych 23.000 i 23 to to samo, to sugerowałbym się zapoznać z takimi terminami jak cyfry znaczące i dokładność obliczeń.

0
somekind napisał(a)

Skoro dla niektórych 23.000 i 23 to to samo

Dla Ciebie to nie jest to samo? Pytam jako matematyk.

0
kij napisał(a)

Dla Ciebie to nie jest to samo? Pytam jako matematyk.

To tak jakbyś spytał czy dla mnie koń jest ssakiem.

0
somekind napisał(a)
kij napisał(a)
somekind napisał(a)

Dla Ciebie to nie jest to samo? Pytam jako matematyk.

Skoro dla niektórych 23.000 i 23 to to samo

To tak jakbyś spytał czy dla mnie koń jest ssakiem.

To jest raczej pytanie z rodzaju „czy struś jest dinozaurem?”
I tak i nie, zależy od definicji dinozaura.

23.000 i 23 matematycznie to to samo (ściślej: tyle samo). W językach programowania może być różnie, np. porówania może zwracać prawdę, ale bezpośrednie przypisanie niekoniecznie musi się udać.

0

23 i 23.000 to nie to samo.
Zdanie "Indyk waży 23 kG." oznacza, że waga indyka jest między 22.5 a 23.5
Zdanie "Indyk waży 23.000 kG." oznacza, że waga indyka jest między 22.995 a 23.005.

0

Zdanie "Indyk waży 23 kG." oznacza, że waga indyka jest między 22.5 a 23.5

Ja się tam nie znam na definicjach matematycznych, ale dla mnie zdanie "Indyk waży 23 kG." oznacza że waga indyka wynosi 23 kG.

@Azarien - może ale nie musi:

(equal 2.0 2)
NIL

(CL) Wszystko zależy od sposobu porównania.

0

Nie istnieje na świecie indyk, którego waga wynosi 23 kG. Poprzednie zdanie pozostaje prawdziwe po zamianie liczby 23 na jakąkolwiek inną.

0
bogdans napisał(a)

Nie istnieje na świecie indyk, którego waga wynosi 23 kG. Poprzednie zdanie pozostaje prawdziwe po zamianie liczby 23 na jakąkolwiek inną.

Tym bardziej jak piszecie kG, a nie kg:
http://pl.wikipedia.org/wiki/Kilogram-si%C5%82a

0
bogdans napisał(a)

Nie istnieje na świecie indyk, którego waga wynosi 23 kG. Poprzednie zdanie pozostaje prawdziwe po zamianie liczby 23 na jakąkolwiek inną.

Tym bardziej jak piszecie kG, a nie kg:
http://pl.wikipedia.org/wiki/Kilogram-si%C5%82a

0
bogdans napisał(a)

Nie istnieje na świecie indyk, którego waga wynosi 23 kG. Poprzednie zdanie pozostaje prawdziwe po zamianie liczby 23 na jakąkolwiek inną.

Tym bardziej jak piszecie kG, a nie kg:
http://pl.wikipedia.org/wiki/Kilogram-si%C5%82a

0

A czy 23.000 * 41.874 to to samo co 23 * 41.874?

0

Dlaczego miałbym pisać kg? Pisałem o wadze, a nie o masie indyka.

0

Ty pisałeś nie o masie, tylko o sile ziemskiego przyciągania -,-. Sorka, ale na Ziemii Masa == Waga!
PS. Ja kupuje 1 kg owoców, nie 10 niutonów.

0

Ja jednak myślę, że @bo jasno się wyraził, od początku pisał o wadze.

Liczba cyfr po przecinku też ma w realnym świecie znaczenie, bo określa dokładność (czy raczej niedokładność) pomiaru. Więc to, czy te zera można zignorować czy nie, zależy od kontekstu, a nie od tego, że "matematycznie to jest to samo".

0

Wracając do postu kija:

Jeżeli chodzi o standard liczb zmiennoprzecinkowych IEEE to:
a + (b + c) != (a + b) + c
a / b * b != a
0 != -0 (tak, są dodatnie i ujemne zera)
itd

Jak widać jest to nieco sprzeczne z matematyką i trzeba to uwzględnić przy projektowaniu języków programowania, kompilatorów jak i samych programów.

Edit:
Fakt, MSM, masz rację, w sumie błędnie założyłem, że floaty są porównywane tymi samymi funkcjami co inty.

#include <cstdlib>
#include <iostream>

int main(int argc, char** argv) {

    float zero = 0.f;
    u_int32_t temp = *reinterpret_cast<u_int32_t*>(&zero) ^ 0x80000000;
    float minusZero = *reinterpret_cast<float*>(&temp);

    std::cout << zero << " " << minusZero << " " << (zero == minusZero);

    return EXIT_SUCCESS;
}

U mnie ten kod normalnie działa, na ideone.com wywala jakieś niezrozumiałe warningi (chodzi o jakieś wyrównywanie, ale gdzie tu złe wyrównanie?).

1 użytkowników online, w tym zalogowanych: 0, gości: 1