Как можно распечатать число с плавающей точкой с большей точностью? - PullRequest
0 голосов
/ 19 декабря 2018

Итак, я пытался закодировать этот вопрос Ссылка , и я разработал логику, и я начал ее кодировать.Код показан ниже, но есть проблема с ним.Когда я дал этому коду следующий код (рисунок 1), выходной результат оказался равным 2,22582e + 007, тогда как правильный принятый результат - 22258199.500000.Какие изменения я должен сделать в типе данных, чтобы исправить эту ошибку.Как я могу изменить обозначение.Пожалуйста, потерпите меня, поскольку мои знания типов данных ограничены.

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int main()
{
    int n,l;
    cin >> n;
    cin >> l;
    vector<float> v;
    vector<float> b;
    for(int i=0; i<n; i++){
        int x;
        cin >> x;
        v.push_back(x);
    }
    sort(v.begin(),v.end());
    if(v[0]!=0){
        b.push_back(v[0]);
        for(int i=1; i<n; i++){
            b.push_back((v[i] - v[i-1])/2.0);
        }
    }else if(v[0] == 0){
        for(int i=1; i<n; i++){
            b.push_back((v[i] - v[i-1])/2.0);
        }
    }
    sort(b.begin(), b.end());
    cout << b[b.size()-1];
} 

Code output

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Вы собираетесь использовать iomanip.

#inlcude <iomanip>

cout<<fixed<<setprecision(6)

fixed отключит научную запись.

setprecision позволит вам быть настолько точным, насколько вы хотите.

0 голосов
/ 19 декабря 2018

Это решило проблему. ссылка Проблема главным образом заключалась в том, что нотация вывода была научной, и иногда онлайн-судьи не соглашаются с тем, что, следовательно, для изменения нотации с научной на фиксированную и на другие формы можно использовать следующий фрагмент кода,Либо вы можете увеличить точность или вы можете изменить обозначения.Любой из последних случаев может помочь.

#include <iostream>
#include <sstream>

int main()
{
    std::cout << "The number 0.01 in fixed:      " << std::fixed << 0.01 << 
'\n'
              << "The number 0.01 in scientific: " << std::scientific << 
0.01 << '\n'
              << "The number 0.01 in hexfloat:   " << std::hexfloat << 0.01 
<< '\n'
              << "The number 0.01 in default:    " << std::defaultfloat << 
0.01 << '\n';
    double f;
    std::istringstream("0x1P-1022") >> std::hexfloat >> f;
    std::cout << "Parsing 0x1P-1022 as hex gives " << f << '\n';
}

вывод данного кода - нажмите здесь

0 голосов
/ 19 декабря 2018

Вы можете использовать std::cout << std::setprecision(std::numeric_limits<float>::max_digits10) для вывода значения в формате с округлением.(Для этого понадобятся заголовки <limits> и <iomanip>).

Если это не сработает, попробуйте также заменить float на double.

...