Я реализовал свою собственную функцию квадратного корня в C ++, чтобы получить точность до 9 баллов, но она не работает - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу получить квадратный корень из числа до 9 точек точности, поэтому я сделал что-то вроде ниже, но я не получаю правильную точность. Здесь e - точность, которая больше 10 ^ 9, а также до 5 точных точек. Что я делаю не так здесь ??

    #include <iostream>
    using namespace std;
    long double squareRoot(long double n) 
        { 

            long double x = n; 
            long double y = 1; 
            long double e = 0.00000000000001; 
            while (x - y > e) 
            { 
                x = (x + y) / 2; 
                y = n / x; 
            } 
            cout << x << "\n";
            return x; 
        } 

    int main() 
    {
        int arr[] = {2,3,4,5,6};
        int size = sizeof(arr)/sizeof(arr[0]);
        long double ans = 0.0;
        for(int i=0; i<size; i++)
        {
            ans += squareRoot(arr[i]);
        }

        cout << ans << "\n";
        return 0;
    }

Вывод

1.41421
1.73205
2
2.23607
2.44949
9.83182

Что я должен сделать, чтобы получить точность до 9 баллов ??

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Есть два места, в которых точность играет роль:

  • точность самого значения
  • точность выходного потока

Вы можете получить вывод с желаемой точностью, только если оба значения value и достаточно точны.

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

std::cout << std::setprecision(9);
// or alternatively:
std::cout.precision(9);

Точность сохраняется до тех пор, пока не будет установлена ​​новая, в отличие, например, от std::setw, которая применяется только для следующего значения.

0 голосов
/ 06 ноября 2019

попробуйте

cout << setprecision(10) << x << "\n";

cout << setprecision(10) << ans << "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...