Warum gibt floor keine ganze Zahl zurück? [duplicate]

Lesezeit: 2 Minuten

Benutzer-Avatar
Dänisch

Gerade bin ich darüber gestolpert, dass die C++ Funktion floor gibt denselben Typ zurück, den Sie übergeben, sei es float, double oder so.

Entsprechend diese Referenz, gibt die Funktion einen abgerundeten ganzzahligen Wert zurück. Warum ist das keine ganze Zahl?

  • Vermutlich aus dem gleichen Grund wie c.

    – johnsyweb

    11. März 2013 um 20:42 Uhr

  • verwandt: stackoverflow.com/questions/511921/…

    – Nate Kohl

    11. März 2013 um 20:43 Uhr

  • Was ist Ihr praktisches Programmierproblem? Benötigen Sie eine Version von floor das gibt ein int zurück?

    – Raymond Chen

    11. März 2013 um 20:44 Uhr

  • Es ist ein Duplikat. Leider hat dieser eine bessere Antwort als der, von dem er ein Betrüger ist.

    – Allmächtig

    11. März 2013 um 20:51 Uhr

Benutzer-Avatar
Lili Ballard

Weil ein ganzzahliger Typ nicht unbedingt die gleichen ganzzahligen Werte wie a enthalten kann float oder double.

int main(int argc, char *argv[]) {
    std::cout << floor(std::numeric_limits<float>::max()) << std::endl;
    std::cout << static_cast<long>(floor(std::numeric_limits<float>::max())) << ::endl;
}

Ausgänge (auf meiner x86_64-Architektur)

3.40282e+38
-9223372036854775808

Darüber hinaus können Gleitkommawerte NaN, +Inf und -Inf enthalten, die alle von a beibehalten werden floor() Betrieb. Keiner dieser Werte kann mit einem ganzzahligen Typ dargestellt werden.

int main(int argc, char *argv[]) {
    std::cout << floor(std::numeric_limits<float>::quiet_NaN()) << std::endl;
    std::cout << floor(std::numeric_limits<float>::infinity()) << std::endl;
    std::cout << floor(-std::numeric_limits<float>::infinity()) << std::endl;
}

Ausgänge

nan
inf
-inf

  • +1 für die Abbildung.

    – johnsyweb

    11. März 2013 um 20:43 Uhr

  • Diese Antwort ist besser als die akzeptierte Antwort im Dupe.

    – Allmächtig

    11. März 2013 um 20:52 Uhr

1371850cookie-checkWarum gibt floor keine ganze Zahl zurück? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy