So definieren Sie benutzerdefinierte Gleitkommazahlen (C-API)

Ich habe einen benutzerdefinierten Float-Datentyp, der 128-Bit-Floats mit zwei 64-Bit-Floats (der Double-Double-Klasse) emuliertdd_real von demQD Bibliothek). Aus C ++ möchte ich ein ndarray nach Python exportieren. Ich weiß bereits, wie man dies für 64-Bit-Floats macht, aber für Double-Doubles muss ich irgendwie meinen eigenen benutzerdefinierten D-Typ angeben. Wie geht das?

Hinweis: numpy hat einen eigenen 128bit float (np.float128) der leider dazu passtlong double In C / C ++ ist dies lediglich ein 80-Bit-Float, der in 128-Bit gespeichert ist (auf allen meinen Plattformen).

Tatsächlich sollte man das genauso machen können wie Numpy exportiert np.float128 (ich weiß nur nicht, wie das gemacht wird), mit dem einzigen Unterschied, dass es benutztdd_real auf der C ++ Seite stattlong double.

Wenn dies hilft, habe ich den C ++ - Typ bereits exportiertdd_real zu python mitboost::python Vielleicht kann dies irgendwie wiederverwendet werden.

Bisher konnte ich folgendes recherchieren

Die numpy Dokumentation fürdtypes bezieht sich aufC-API zum Exportieren von benutzerdefinierten Datentypen, aber in diesem Dokument werden nur die vorhandenen Datentypen erläutert und keine neuen erstellt.

WannStöbern Stapelüberlauf fand ichdiese Beispiel, aber ich frage mich, ob fürdd_real das könnte einfacher sein. Ich sehe auch nicht, wo der D-Typ tatsächlich erzeugt wird. Vielleicht nur in Python__ drin__ übernp.typeDict['quaternion'] = np.dtype(quaternion). Wie verwende ich diesen dtype in C ++, wenn ich ein ndarray generieren möchte?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage