2017-04-11 4 views
-1
int a=pow(100,2);//line 1 
int b=ceil(pow(100,2));//line 2 
cout<<pow(100,2);//line 3 

Linie 1 gibt a=9999 auf Druck den Wert von apow Arbeit anders, erklären im Detail?

Linie 2 gibt b=10000 auf Druckwert von b

Linie 3 druckt 10000

verstand ich, dass pow geben Wert 9999.9999 so ceil func . In Zeile 2 gibt es den oberen Wert.

Aber warum nicht cout nicht gedruckt 9999.9999

jemand, warum pow verhalten sich wie diese Rückkehr Dezimalwert pow erklären kann nur eine Potenzfunktion ist, warum es nicht einfach 100*100 als Antwort geben?

+1

es druckt nicht 9999.9999, weil es eine Ganzzahl ist kein float .... – Dadep

+0

und Fließkomma -> integrale Konvertierung schneidet – jaggedSpire

+0

Was ist schlecht in dieser Frage viele Leute nicht wissen, dass pow gibt einen Dezimalwert –

Antwort

3

In cout Anweisung pow(100, 2) ist tatsächlich ein Wert mit doppelter Genauigkeit und leicht unter 10000 (von einem wohlbekannten Effekt der pow Funktion), aber die Standardgenauigkeit Einstellung cout Ursachen Runde und Ausgang als Integer.

1

Der Grund ist, aufgrund von zwei powdouble Werte als Argumente nimmt (und einen double zurückkehrt) und wird typischerweise so implementiert, dass pow(x, y)exp(y log x) ist. Das geht für scheinbar triviale Eingabewerte. Siehe Is floating point math broken?

Beachten Sie, dass std::pow Überladungen für integrierte Typen aufweist, die hilfreich sein können, wenn Sie in Ganzzahlarithmetik arbeiten.

+0

Das erklärt nicht, warum die Ausgabe nicht 9999.9999 –

+0

Gekoppelt mit der verknüpften Frage ist, glaube ich, dass es tut. – Bathsheba

+0

Nein, tut es nicht. –

Verwandte Themen