Auto Rounding From Something While Dividing and Multiplying

Viewed 50
#include <iostream>
#include <iomanip>
#include <vector>

using namespace std;

int(main){
std::vector<int> vObj;
        float n = 0.59392;
        int nCopy = n;
        int temNum = 0;;
        while (fmod(nCopy, 1) != 0) {
            temNum = (nCopy * 10); cout << endl << nCopy << endl;
            nCopy *= 10;
            vObj.push_back(temNum);
            cout << "\n\n Cycle\n\n";
            cout << "Temp Num: " << temNum << "\n\nN: " << nCopy << endl;
        }
return 0;
}

For example, I input 0.59392 but eventually when the code reaches the bottom, where it should be going 5939.2 and then go to 59392 and stop but for some reason it keeps going.

1 Answers

yeah , so you have 3 major problems in your code , first of all : it's int main() not int(main) . second : the variable named **nCopy ** is not supposed to be a integer data type , third one : you have to know what the actual representation of the float number , but first this is my solution for your problem , it's not the best one , but it works for this case :

#include <iostream>
#include <iomanip>
#include <vector>

using namespace std;

int main() {
    std::vector<int> vObj;
    double n = 0.59392;
    double nCopy = n;
    int temNum = 0;;
    while (fmod(nCopy, 1) != 0) {
        temNum = (nCopy * 10); cout << endl << nCopy << endl;
        nCopy *= 10;
        vObj.push_back(temNum);
        cout << "\n\n Cycle\n\n";
        cout << "Temp Num: " << temNum << "\n\nN: " << nCopy << endl;
    }
    return 0;
}

so the explanation is as follow , the double data types gives higher precision than float , that's why I used double instead of float , but it will lack accuracy when the number becomes big .

second of : you have to how is float or double is represented , as the value 0.59392 is actually stored in the memory as value 0.593900024890899658203125 when using float according to IEEE 754 standard , so there are other types of decimals to solve this problem where the difference between them is as follow

  • Decimal representation gives lower accuracy but higher range with big numbers and high accuracy when talking about small numbers, most 2 used standards are binary integer decimal (BID) and densely packed decimal (DPD)
  • float and doubles gives higher accuracy than Decimal when talking about big numbers but lower range ,they follow IEEE 754 standard
  • Fixed-Point types have the lowest range but they are the most accurate one and they are the fastest ones

but unfortunately , C++ only supports float and double types of numbers , but I believe there is external libraries out there to define a decimal data type.

Related