Home > database >  Auto Rounding From Something While Dividing and Multiplying
Auto Rounding From Something While Dividing and Multiplying

Time:08-28

#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.

CodePudding user response:

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.

  •  Tags:  
  • c
  • Related