Wie bekomme ich Boost-Teile?

8

Sagen Sie, ich habe diese Nummer :

%Vor%

Die Backend-Daten sind:

%Vor%

was genau ich bekommen möchte; Leider finde ich keinen Weg, entweder beide Teile meiner Nummer als bmp::int128_t zu erhalten - zum Beispiel - oder die zugrunde liegenden Daten meiner Nummer.

Das heißt, ich möchte, dass so etwas existiert:

%Vor%

oder

%Vor%

Wie auch immer, weiß jemand, wie man das macht, was ich erreichen will?

Für den Datensatz muss ich eine große Dezimalzahl aus Gründen der Interoperabilität als C # -Zeichen angeben.

    
mister why 10.05.2013, 11:26
quelle

3 Antworten

1

Von der Boost-Dokumentation ist das hintere Ende absichtlich undurchsichtig, da sie jederzeit ändern kann, ohne Vorwarnung. (% Co_de%) von Ссылка

Soweit ich hier haben Sie zwei Möglichkeiten sehen kann. Sie können für die spezifische Version der Back-End-Klasse auf den Quellcode schauen Sie verwenden, greifen Sie es von Ihrem Class template cpp_dec_float fulfils all of the requirements for a Backend type. Its members and non-member functions are deliberately not documented: these are considered implementation details that are subject to change. des number -Methode verwendet wird, und hoffen, dass das Backend nie ändert (insbesondere Änderungen berücksichtigen, die nur Binärformat brach und nicht Kompilation).

Alternativ würde ich Ihnen empfehlen, die String-Repräsentation von backend zu nehmen und sie in die beiden Teile selbst aufzuteilen, indem Sie die Konstruktoren cpp_dec_float oder string für die zugrundeliegenden Typen verwenden, an denen Sie interessiert sind.

    
Mark B 23.06.2014 15:54
quelle
0

Ich weiß nicht, ob Sie das suchen, versuchen Sie ...

%Vor%

Der Typ ist immer noch cpp_dec_float_100, enthält aber nur den ganzzahligen Teil. Ich hoffe, das hilft.

    
Fernando Pelliccioni 23.01.2014 03:03
quelle
-1

Ich vermute, dass Sie wahrscheinlich% verwenden können co_de%, die Werte zu erhalten, die Sie suchen, obwohl Sie noch prüfen werden, dass sie den C # Dezimal Typ passen. Siehe hierzu das Handbuch zu den Boost.Multiprecision-Backend-Anforderungen: Ссылка

Sie können immer nur die Langhand-Mathematik und die Bereichsüberprüfung durchführen; Wenn Sie nicht zu viele Zahlen übertragen, könnte dies schnell genug sein.

Nachdem Sie all das gesagt haben, können Sie gerne unartig sein und etwas wie:

tun %Vor%

Aber wenn es in einer zukünftigen Veröffentlichung bricht, kannst du beide Teile behalten.

Hey, danke für den Kommentar ohne Kommentar. Das ist sehr hilfreich.

Um meine obigen Kommentare zu verdeutlichen:

Mit eval_frexp : nach weiterer Forschung, scheint es, dass das eval_frexp nach wie vor nur Potenzen von 2 bietet, nicht Potenzen von 10, wie scheint für das eval_frexp(b, cb, pi) Typen benötigt werden. So vermute ich, dass Sie die Arithmetik in langer Form ausführen müssen, wenn Sie nur die öffentliche Schnittstelle verwenden möchten.

Missbrauch von Decimal -Members: Die Autoren und Betreuer der Boost.Multiprecision-Klassen haben sie nach bestimmten Richtlinien entworfen; Offensichtlich haben sie die Zukunftssicherheit für wichtiger gehalten als den Zugang zur internen Struktur:

  

Klassenvorlage cpp_dec_float erfüllt alle Anforderungen für einen Backend-Typ. Seine Mitglieder- und Nichtmitgliedsfunktionen sind absichtlich nicht dokumentiert: es handelt sich um Implementierungsdetails, die sich ändern können. ( Ссылка )

Mein Vorschlag, die eindeutig als „frech“ und mit der Warnung markiert wurde, dass es wahrscheinlich in einer zukünftigen Version brechen würde, war die Design-Anforderungen des OP vor denen des Autor von B.MP zu verhängen.

Die sauberste Methode könnte darin bestehen, eine Änderung an der Klasse private vorzuschlagen, bei der die interne Struktur offengelegt wird; Angesichts eines überzeugenden Anwendungsfalls und einer Analyse, inwieweit sich der Code historisch geändert hat oder nicht, könnte er sogar akzeptiert werden.

Hoffe, das hilft. Wenn der Leser mit ihr noch Fragen haben, wenden Sie sich bitte an downvote, aber bitte lassen Sie mich wissen, welcher Teil stört Sie so kann ich versuchen, es zu verbessern.

    
AnthonyFoiani 12.05.2013 10:41
quelle

Tags und Links