Diese Frage hat hier bereits Antworten :
Warum geben round() und ceil() keine ganze Zahl zurück?
(2 Antworten)
Abgeschlossen Vor 9 Jahren .
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?
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
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