8
votes

Comment obtenir des pièces numériques multiples de multiplication?

dire que j'ai ce numéro : xxx

ses données de backend sont les suivantes: xxx

ce qui est exactement Ce que je veux obtenir; Malheureusement, je ne trouve pas de moyen d'obtenir des deux parties de mon numéro comme BMP :: int128_t - pour l'instance-- ou les données sous-jacentes de mon numéro.

C'est-à-dire que j'aime quelque chose comme ça existe: xxx

ou xxx

quand même, quelqu'un connaît-il comment faire Ce que j'essaie d'atteindre?

Pour le dossier, j'ai besoin de cela pour exprimer un grand nombre décimal comme une décimale C # pour le souci d'interopérabilité.


0 commentaires

3 Réponses :


-1
votes

Je soupçonne que vous pouvez probablement utiliser eval_frexp code> pour obtenir les valeurs que vous recherchez, même si vous devez toujours vérifier qu'elles entrent dans le type décimal C #. Voir le manuel sur Boost.Multiprecision Backend Exigences ici: http: //www.boost .ORG / DOC / LIBS / 1_53_0 / LIBS / MULTIPRÉCISION / DOC / HTML / BOOST_MULTIPRÉCISION / REF / BACKENDCONC.HTML

Vous pouvez toujours faire la vérification des mathématiques et de la gamme de Longhand; Si vous ne transférez pas trop de chiffres, cela pourrait être assez rapide. P>

Ayant dit tout cela, vous êtes la bienvenue pour être méchant et faire quelque chose comme: P>

#define private public
#define protected public
#include <boost/multiprecision/cpp_dec_float.hpp>
#undef private
#undef protected


3 commentaires

Ce n'était pas moi, mais #define ing est un comportement indéfini et (presque?) Jamais une solution solide aux problèmes


Oh, aucun argument là-bas. J'ai essayé de formuler la réponse originale (et mon commentaire snarky sur le bowvote) pour être clair que ce n'est pas une bonne idée d'utilisation de la production. Si le OP a vraiment besoin de cette capacité à long terme, alors s'ils ne peuvent pas convaincre les responsables B.MP, ils devraient simplement le fourrer et le sucer dans leur base de code - le BPL permet à cela. J'essayais juste d'offrir un "c'est 23h et tu en as besoin demain" solution. Peut-être que ça vaut un bowvote, Dunno.


Anecdote amusante: J'ai essayé de créer un "public privé #define; pas de regrets" meme sur le générateur de meme interne de ma société actuelle ... seulement être redirigé vers un exemple existant . Donc, je suppose que je ne suis pas la seule âme démente avec cette idée. :)



0
votes

Je ne sais pas si vous recherchez, essayez ... xxx

Le type est toujours cpp_dec_float_100, mais ne contient que la partie entière. J'espère que cela vous aidera.


0 commentaires

1
votes

de la documentation Boost L'extrémité arrière est intentionnellement opaque car elle peut changer à tout moment sans avertissement. ( Modèle de classe CPP_Dec_Float remplit toutes les exigences relatives à un type de backend. Ses membres et ses fonctions non membres sont délibérément non documentés: ils sont considérés comme des détails de mise en œuvre soumis à des modifications. ) de http://www.boost.org/doc /Libs/1_55_0/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html

Autant que je puisse voir, vous avez deux choix ici. Vous pouvez consulter le code source de la version spécifique de la classe Backend que vous utilisez, l'accédez à partir de votre numéro à l'aide de la méthode Backend et espérons que le backend ne jamais changements (en particulier envisagez des modifications qui ne cassèrent que le format binaire et non la compilation).

Alternativement, je vous recommanderais de prendre la représentation des chaînes du cpp_dec_float et divisez-la dans les deux parties vous-même, à l'aide de la chaîne ou char * Constructeurs pour les types intégraux sous-jacents qui vous intéressent.


1 commentaires

+1, avec la note supplémentaire que la licence publique de Boost permet de copier presque toute utilisation, y compris commerciale. Si la représentation interne si une version est exactement ce que les besoins OP / veut, alors si les propriétaires de Boost.MultiPrecision ne peuvent pas être convaincus de geler une mise en œuvre, l'OP peut geler eux-mêmes.