ich drei Stücke von Code nur versucht:über die Funktion pow in C++
#include<cstdio>
#include<cmath>
#include<cstring>
int main()
{
int a = 3;
int b = pow(10,a);
printf("%d",b);
return 0;
}
//Output:1000
#include<cstdio>
#include<cmath>
#include<cstring>
int main()
{
int a = 3;
int b = pow(10,a-1);
printf("%d",b);
return 0;
}
//Output:99
#include<cstdio>
#include<cmath>
#include<cstring>
int main()
{
int a = 3;
int b = pow(10,a-2);
printf("%d",b);
return 0;
}
//Output:10
Ich mag würde wissen, warum der zweite Block des Codes ausgegeben 99, es Präzision wegen Gleitkomma ist? Oder ist es weil ich Float-Nummern in der POW-Funktion verwenden sollte? (Wie 10,0) Ich bin in der Regel verwirrt über die Genauigkeit von C++, ich werde für Ihre Hilfe dankbar sein.
Lange Rede, kurzer Sinn: 'pow' ist nicht für ganzzahlige Mathematik. –
Sie * verwenden * Fließkommazahlen mit 'pow', Sie konvertieren sie einfach von ganzen Zahlen und zurück. –
Es ist nicht die "10" vs "10.0", die ein Problem ist. Das Problem ist das "int b ...", was bedeutet, dass jede Ungenauigkeit in der Rückkehr von "pow (10, 2)" einfach abgeschnitten wird. So wird '99.9999999 + etwas epsilon' zu' 99'. (Obwohl ich etwas überrascht bin, dass 'pow (10,2)' nicht genau das Ergebnis '100' liefert. Das hat wahrscheinlich etwas mit dem Fließkomma-Standard zu tun.) –