27 Stimmen

Wo kann ich die mathematischen Funktionen von Python einsehen?

Ich würde mir gerne ansehen, wie Python Quadratwurzeln berechnet, also habe ich versucht, die Definition für math.sqrt() aber ich kann sie nirgends finden. Ich habe gesucht in _math.c , mathmodule.c und anderswo.

Ich weiß, dass Python die mathematischen Funktionen von C verwendet, aber sind diese irgendwo in der Python-Distribution, oder sind sie mit Code anderswo verknüpft? Ich verwende Mac OS X.

Wo ist der Algorithmus in math.sqrt() ?

18voto

Alexei Sholik Punkte 6927

Das hängt von der Umsetzung ab. CPython verwendet mathematische Funktionen aus der Standard-C-Bibliothek. Jython verwendet höchstwahrscheinlich die mathematischen Methoden von Java. Und so weiter.

Tatsächlich hat Python nichts mit der eigentlichen Implementierung von mathematischen Funktionen zu tun. Diese haben eher mit IEEE 754 zu tun, das heutzutage fast ausschließlich zur Darstellung von Fließkommazahlen in Computern verwendet wird.

Wie auch immer, in Bezug auf CPython, seine math Modul ist nur ein dünner Wrapper über C-Funktionen ( prooflink , am Ende der Seite). Die C-Funktionen sind als Teil der Standard-C-Bibliothek implementiert. Sie ist in der Regel in Betriebssystemen enthalten und wird höchstwahrscheinlich in binärer Form, ohne Quellen, verteilt. Beachten Sie auch, dass viele Mikroprozessoren spezielle Befehle für einige dieser Operationen haben, und Ihr Compiler kann durchaus auf diese zurückgreifen, anstatt auf die Implementierung in der C-Bibliothek zu springen.

Den genauen Algorithmus, der in der Standard-C-Bibliothek auf Ihrem System verwendet wird, kann ich Ihnen nicht nennen. Einige der möglichen Algorithmen werden erklärt ici .

Im speziellen Fall von OS X befinden sich die mathematischen Funktionen in libSystem.dylib , das leider nicht Open Source ist (es gibt nur Stub-Code auf der Open-Source-Seite von Apple verfügbar ). Sie können es jedoch zerlegen, wenn Sie daran interessiert sind - versuchen Sie auf aktuellen Systemen z.B.

otool -tvV /usr/lib/system/libsystem_m.dylib

2voto

David Yen Punkte 68

Einige Module sind in C und nicht in Python geschrieben, so dass Sie die .py-Dateien nicht finden können. Für eine Liste dieser Module können Sie verwenden:

import sys print sys.builtin_module_names

Da es in C geschrieben ist, müssen Sie es im Quellcode finden. Wenn Sie den Quellcode bereits haben, finden Sie ihn im Verzeichnis modules.

-1voto

Andreas Jung Punkte 1

-7voto

Jake Nixon Punkte 93

Ich bin mir nicht sicher, wo ich den genauen Algorithmus von Python finden kann, aber ich hoffe, dies hilft Ihnen. Der einfachste Weg, eine Quadratwurzel in Python zu berechnen, ist die Verwendung des Operators ** (Potenz). Ich weiß nicht, wie viel du mit Indizes gearbeitet hast, aber Quadratwurzel ist dasselbe wie die Potenzierung von etwas mit der Hälfte. Wenn das stimmt, könnten Sie also verwenden:

print x**0.5

Dies gibt die Quadratwurzel der Zahl aus, die Sie an die Stelle von x setzen. Wenn Sie Python 3 verwenden, müssen Sie dies natürlich als schreiben:

print(x**0.5)

Das wäre der einfachste Weg, um einen Algorithmus zur Berechnung der Quadratwurzel einer Zahl zu erstellen. Dies könnte in einer Funktion wie der folgenden implementiert werden:

sqrt(x):
    return x**0.5

Für andere Wurzeln, wie z. B. die kubische Wurzel, können Sie eine Funktion wie diese verwenden:

root(x, root):
    return x**root

Und wenn Sie die Root-Nummer in die Funktion eingeben, verwenden Sie die Nummern der Indizes in dezimaler Form, zum Beispiel:

2: 0.5

3: 0,33333333 (wiederkehrend)

4: 0.25

5: 0.2

Ich hoffe, Sie können das Muster erkennen. Ich hoffe auch, dass dir das etwas geholfen hat :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X