Ich habe einfach ein Programm geschrieben, um die Potenz einer ganzen Zahl zu berechnen. Aber die Ausgabe war nicht wie erwartet. Es funktionierte für alle Integer-Zahlen mit Ausnahme der Potenz von 5.
Mein Code ist:
%Vor%Die Ausgabe ist ungefähr so:
%Vor% Können wir pow()
function für den Datentyp int nicht verwenden?
Fließkomma-Präzision macht hier ihren Zweck. Die tatsächliche Arbeit von pow
verwendet log
Sehen Sie sich math.h
library an, die besagt:
<math.h>
/ * Überschüssige Genauigkeit bei Verwendung einer 64-Bit-Mantisse für FPU-Mathematikoperationen verursacht unerwartete Ergebnisse mit einigen MSVCRT-mathematischen Funktionen. Zum Beispiel, es sei denn, der Rückgabewert der Funktion wird gespeichert 53-Bit-Mantisse), ruft pow mit x und y als ganzzahlige Werte auf manchmal erzeugen sie ein nicht integrales Ergebnis. ... * /
Fügen Sie einfach 0.5
dem Rückgabewert von pow
hinzu und konvertieren Sie ihn dann in int
.
Also, die Antwort auf Ihre Frage
Funktioniert pow () für
int
Datentyp in C?
Nicht immer. Für die Integer-Potenzierung können Sie eine eigene Funktion implementieren (dies funktioniert nur für + ve-Ganzzahlen):
%Vor%Es gibt kein int basiertes Pow. Was Sie leiden, ist Gleitkomma-Kürzung.
ein int basierter pow ist zu beschränkt (der Bereich der Eingaben würde schnell einen int überlaufen). In vielen Fällen ist Int-basierte Pow, wie in Ihrem Fall, wo seine 2-Potenzen effizient anders möglich sind.
printf("%a", pow(10, 2))
und sehen, was Sie bekommen; Ich nehme an, du wirst sehen, dass du nicht ganz 100 bekommst. Rufe lround
auf, wenn du Runden statt Abschneiden willst.
Tags und Links c exponentiation pow