Warum würde is_int (sqrt (100)) false zurückgeben?

7

Weiß jemand, warum dies immer False zurückgibt?

%Vor%

und welche Syntax sollte ich verwenden, um zu überprüfen, ist Quadratwurzel eine ganze Zahl?

    
silkAdmin 02.03.2012, 16:33
quelle

6 Antworten

3

Wenn Sie überprüfen möchten, ob sqrt eine Ganzzahl ist, können Sie Folgendes tun:

%Vor%     
Felix Kling 02.03.2012, 16:40
quelle
10

Funktion sqrt gibt float value, nicht int zurück.

    
hsz 02.03.2012 16:34
quelle
6

Das Problem liegt in Ihrer Definition von "Integer". Sie lesen es als "einen Wert, der keine signifikanten Bruchzahlen ungleich null hat", während in is_int nur auf einen Datentyp verwiesen wird, d. H. Buchstäblich alles mit dem Typ int .

Das heißt, der Fließkommawert 10.0 ist immer noch ein Fließkommawert, obwohl sein mathematischer Wert gleich dem der Ganzzahl 10 ist.

Das Ergebnis von sqrt ist nie eine ganze Zahl; Sie können jedoch überprüfen, ob ein Gleitkommawert irgendwelche von null verschiedenen gebrochenen signifikanten Zahlenwerte hat, indem Sie ihn mit einer Zahl vergleichen, in der Sie diese alle bewusst ausgeschaltet haben.

Eine naive Implementierung:

%Vor%

Natürlich sollten Sie niemals etwas mit einem Fließkommawert vergleichen mit == ; Verwenden Sie Ihren bevorzugten Fließkomma-Gleichheitsmechanismus, um diesen Test durchzuführen.

Aktualisieren

Tatsächlich nehme ich an, dass die einzigen Werte, für die dieser Vergleich möglicherweise fehlschlagen könnte, Bruchzahlen sind. In diesem Fall sollte der Test trotzdem fehlschlagen. Also == könnte ausreichen.

    
quelle
2

sqrt gibt einen Gleitkommawert zurück, keine Ganzzahl, daher is_int gibt false zurück.

Verwenden Sie stattdessen is_float .

    
Bjoern 02.03.2012 16:35
quelle
1

is_int () bezieht sich auf den Datentyp des Ergebnisses, nicht auf den in diesem Ergebnis enthaltenen Wert. sqrt () immer gibt unabhängig vom Wert

ein Ergebnis des Datentyps float zurück     
Mark Baker 02.03.2012 16:41
quelle
-1

Datentyp von sqrt(100) is float . is_int sucht nach dem Datentyp und nicht nach value

    
Sabari 02.03.2012 16:44
quelle

Tags und Links