Je me demande si un nombre est représenté d'une manière dans une représentation en virgule flottante, est-ce qu'il va être représenté de la même manière dans une représentation qui a une plus grande taille. En d'autres termes, si un nombre a une représentation particulière en tant que float
, aura-t-il la même représentation si float
est transtypée en double
, puis de la même façon lorsqu'il est transtypé en long double
. Je me demande parce que j'écris une implémentation BigInteger et tout nombre à virgule flottante qui est passé dans J'envoie à une fonction qui accepte un long double
pour le convertir. Ce qui m'amène à ma prochaine question. Évidemment, les points flottants n'ont pas toujours de représentations exactes, donc dans ma classe BigInteger, que dois-je essayer de représenter quand on me donne un float. Est-il raisonnable d'essayer de représenter le même nombre que celui donné par std::cout << std::fixed << someFloat;
même si ce n'est pas le même que le nombre passé? Est-ce la représentation la plus précise que je serai en mesure d'obtenir? Si oui, ...Quelques questions sur les points flottants
Quelle est la meilleure façon d'extraire cette valeur (en base une puissance de 10), au moment où je suis juste en train de l'attraper comme une chaîne et de le passer à mon constructeur de chaîne. Cela fonctionnera, mais je ne peux pas m'empêcher de penser qu'il y a un meilleur moyen, mais prendre le reste quand je divise par ma base n'est pas précis avec les flotteurs. Finalement, je me demande s'il y a un équivalent en virgule flottante de uintmax_t
, c'est un nom de type qui sera toujours le plus gros type à virgule flottante sur un système, ou est-ce qu'il n'y a pas de point parce que long double
sera toujours le c'est la même chose qu'un double).
Merci, T.
Merci pour votre réponse. Je ne suis pas sûr de comprendre ce que vous voulez dire quand vous dites "un format BigInteger devrait être capable de le représenter exactement". Certes, un BigInteger devrait être en mesure de le représenter, mais comment puis-je obtenir la valeur en premier lieu. Il y a des nombres (sans partie fractionnaire) que le compilateur accepte comme un flottant valide mais quand je les imprime, j'obtiens un nombre différent. Est-ce un problème avec 'cout' alors et le nombre est toujours représenté exactement. Désolé, c'est un peu incohérent, je suis juste un peu confus à ce sujet. Aussi si cela aiderait si je poste le contour de mon ... – tjm
... mise en œuvre, je suis heureux de le faire. C'est un peu long cependant. (et très difficile en ce moment). – tjm
Je suppose que vous voulez dire quelque chose comme 'float f = 123456789123456789.0f;' C'est une limitation du point flottant, pas de "BigIntegers". BigIntegers devrait être capable de représenter toutes les valeurs (intégrales) possibles des flotteurs, mais pas vice versa. –