2017-02-17 6 views
0

Je faisais un programme qui prenait d'abord 2 nombres (avec le type de données float) de l'utilisateur puis demandais à l'utilisateur jusqu'à quel chiffre il voulait diviser le nombre et le diviser finalement jusqu'à ce nombre et «cout < <». Il a compilé mais n'a pas fonctionné jusqu'à la marque quand j'ai calculé 22/7 ce qui est un non irrationnel. Jusqu'à 100 chiffres, il a juste calculé jusqu'à 30 ou 40 chiffres, puis le reste était rempli de zéros. Quelque chose comme ceci: 3.1428570747375488281250000000000000000000000000000000000000000000000000000000000000000000000000000000setprecision() ne fonctionnait pas comme prévu

Voici mon code:

#include <iostream> 
#include <cstdlib> 
#include <iomanip> 
using namespace std; 
int main() 
{ 
    system("clear"); 
    float y; 
    int z; 
    float x; 
    float a; 
    cout << "\nHello User\n"; 
    cout << "\nEnter first num to be divided: "; 
    cin >> x; 
    cout << "\nCool!! Now enter the 2nd number: \n"; 
    cin >> y; 
    cout << "\Exelent!! Enter the place upto which u wanna caculate: "; 
    cin >> z; 
    a = x/y; 
    cout << fixed << showpoint; 
    cout << setprecision(z); 
    cout << "Calculating......\n" << a << endl; 
    return 0; 
} 
+0

Tous les nombres avec 6 chiffres décimaux significatifs ou moins peuvent être convertis en une valeur à virgule flottante IEEE 754 sans perte de précision. Lire sur les types à virgule flottante IEEE. –

+1

22/7 n'est certainement pas un nombre irrationnel. – molbdnilo

+0

oh je veux dire PI @molbdnilo – ShivamProgramer

Répondre

3

types à virgule flottante ont une certaine précision. Vous n'obtenez pas de résultats exacts lorsque vous travaillez sur des flotteurs (ou des doubles). Maintenant, pour obtenir une meilleure précision, utilisez double au lieu de float (Voir this post pour plus de détails).

Vous pouvez #include <limits>, supprimer l'étape qui obtient la précision de l'entrée et changer votre code:

std::cout << std::setprecision(std::numeric_limits<float>::max_digits10);

pour afficher le résultat avec une précision maximale pour le type que vous utilisez.