Jak zdefiniować niestandardowe typy liczb typu float (C-API)

Mam niestandardowy typ danych zmiennoprzecinkowych, który emuluje 128-bitowe zmiennoprzecinkowe przy użyciu dwóch 64-bitowych pływaków (klasa podwójnego podwójnego)dd_real zBiblioteka QD). Z C ++ chcę wyeksportować ndarray do Pythona. Wiem już, jak to zrobić dla 64-bitowych pływaków, ale dla podwójnych podwójnych potrzebuję jakoś określić własny niestandardowy typ. Jak to zrobić?

Uwaga: numpy ma swój własny pływak 128-bitowy (np.float128), niestety jest to mapowanie nalong double w C / C ++, który jest tylko 80-bitowym floatem przechowywanym w 128 bitach (na wszystkich moich platformach).

W rzeczywistości powinno być możliwe zrobienie tego dokładnie w taki sam sposób, w jaki numpy eksportuje np.float128 (po prostu nie wiem, jak to się robi), z tą jedyną różnicą, że używadd_real po stronie C ++ zamiastlong double.

Jeśli to pomoże, wyeksportowałem już typ C ++dd_real do Pythonaboost::python może można to jakoś ponownie wykorzystać.

Do tej pory udało mi się zbadać następujące

Numeryczna dokumentacja dladtypes odnosi się doC-API jak eksportować niestandardowe typy, ale dokument ten w jakiś sposób wyjaśnia tylko istniejące typy, a nie jak tworzyć nowe.

Gdyprzeglądanie Znalazłem stackoverflowto przykład, ale zastanawiam się, czy dladd_real to może być prostsze. Nie widzę też miejsca, w którym dtype jest generowany. Może tylko w pytonie__ w tym__ przeznp.typeDict['quaternion'] = np.dtype(quaternion). Jak używać tego dtype w C ++, gdy chcę wygenerować ndarray?

questionAnswers(1)

yourAnswerToTheQuestion