Funktioniert pow () für den int-Datentyp in C? [Duplikat]

8

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?

    
basanta 22.04.2015, 03:41
quelle

4 Antworten

12

Fließkomma-Präzision macht hier ihren Zweck. Die tatsächliche Arbeit von pow verwendet log

%Vor%

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 .

%Vor%

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%     
haccks 22.04.2015, 03:56
quelle
3

Die Funktion der C-Bibliothek double pow (double x, double y)

Es dauert doppelte Art

    
ANjaNA 22.04.2015 03:49
quelle
3

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.

    
Keith Nicholas 22.04.2015 03:53
quelle
2

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.

    
Carl Norum 22.04.2015 03:53
quelle

Tags und Links