Les nombres long long sont limités à 9 223 372 036 854 775 807, donc ton calcul peut être entièrement effectué en long long. sauf que le dernier pow() force une conversion en double. Et les doublepermettent d'avoir des nombres plus grands mais avec moins de précision (~16 chiffres significatifs).
Ton calcul est donc près des limites des types standards du langage. Ta calculatrice doit vraisemblablement utiliser des types plus précis, le C++ ne peut pas concurrencer avec cela à moins d'utiliser un bibliothèque pour du calcul de précision ou d'implémenter toi même un type plus précis.
#include "pow10.h"
//package
//basic
//project
__int64 pow10(__int8 pow)
{
__int64 resultat = 1;
for (int i = 0; i < pow; i++)
{
resultat *= 10;
}
return resultat;
}
Dalfab a écrit:
Bonjour,
Les nombres long long sont limités à 9 223 372 036 854 775 807, donc ton calcul peut être entièrement effectué en long long. sauf que le dernier pow() force une conversion en double. Et les doublepermettent d'avoir des nombres plus grands mais avec moins de précision (~16 chiffres significatifs).
Ton calcul est donc près des limites des types standards du langage. Ta calculatrice doit vraisemblablement utiliser des types plus précis, le C++ ne peut pas concurrencer avec cela à moins d'utiliser un bibliothèque pour du calcul de précision ou d'implémenter toi même un type plus précis.
ce calcule est fait pour exploité 3 __int64 a la fois (pour stoqué du temps allant de la yotta seconde (1 ys = 10^24 s) a la yocto seconde(1 ys = 10^-24 s) de plus je transforme directement le pow en __int64
ce calcule est fait pour exploité 3 __int64 a la fois (pour stoqué du temps allant de la yotta seconde (1 ys = 10^24 s) a la yocto seconde(1 ys = 10^-24 s) de plus je transforme directement le pow en __int64
Heu... Tu te rend compte que tu voudrais donc stocker des valeurs s'étendant sur un intervalle de 10^48 ???? Aucun type de base ne pourra te fournir un intervalle suffisant, vu que, au mieux, unsigned long long permet la représentation de valeurs comprise dans l'intervalle [0,2^64[
Sans oublier qu'une addition sur des valeurs "proches des limites" pourrait nécessiter de représenter une valeur de l'ordre de 10^48 et que, si on parle d'une multiplication, cette valeur peut aller jusqu'à 10^98 (si je ne m'abuse, du moins)
Pour manipuler de tels ordres de grandeur, tu n'as pas d'autre choix: tu dois passer en précision arbitraire. LibGMP pourrait éventuellement faire l'affaire
Mais comme je présumes que tu ne voudras pas manipuler tes yotta en les connaissant sous la forme de yocto (seul moyen d'arriver au résultat avec des valeurs entières), une libMPFR devrait te permettre de les manipuler sous forme d'unité (seconde, dans le cas présent?)
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
sachant que l'univers existe depuis approximativement au maximum 13.9 milliards d’années d’après la théorie du big bang.
60*60*24*365.25 *(13.9^9) = 4,3865064*10^17 s. ce qui n'est même pas 1 exaseconde (1 Es = 10^18 s)
sachant que je combine 3 __int64(comme si dessous) qui mène a une capacité de 10^30 s.Ce qui veux dire aussi que je peux stoqu
10^30 /4,3865064*10^17 / = 2.28*10^12 fois l'age de univers.
donc je n’ai pas a me soucier de la taille lors des calcules et de plus comme les variable classique je vérifie si le calcule ne dépasse pas la taille de mes variables
Soit... Si tu arrive à me représenter tous les bits de ta donnée pour cette fameuse valeur de 4,3865064*10^17 s ...
Ou mieux encore: si tu arrives à me la représenter en yocto seconde (en binaire, cela va de soi )
Parce que j'avouerai que j'ai du mal à interpréter l'image que tu me présente
- Edité par koala01 19 juin 2018 à 4:26:32
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
une calculatrie qui ne marche pas
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
En recherche d'emploi.