2016-12-15 15 views
0
//find square root of a number n till d decimal points 
#include<iostream> 
#include<iomanip> 

using namespace std; 
int main(){ 
    int n;int d;cin>>n>>d; 
    double x=n;int i=1; 
    while(i<=20){ 
     float t=(x+n/x)/2;i++;x=t; 
    } 
    cout<<fixed<<setprecision(d)<<x<<endl; 



    } 

アルゴリズムは正しいように見えますが、私はsetprecisionが自分の望んでいない番号を四捨五入すると思います。私の最終的な答えを四捨五入しないsetprecision()の他の代替手段ですか? INPUT 私には3.1623 が返されますが、回答は3.1622 と入力してください。また、10 7は私に小数点第4位の2を持つ3.1622777を与えます。C++で数の平方根を見つける

+0

がhttp://stackoverflow.com/questions/19611198/finding-square-root-without-using-sqrt-function – cokceken

+0

精度の点が丸い場合にTを決定することである:ここで、3.1623は3.1622777に近いです3.1622よりも大きいので、それは3に丸めても間違いではありません。良い例はpiです。3.1416として使用されますが、精度は3.1415926535 ...となり、どちらも正解です。より正確です。 – Adalcar

+0

私は 'double t = .. ;最初に。 –

答えて

1

小数点以下を切り捨てるには、10^dを乗じて床を取り、同じ数で割ります。

double multiplier = pow(10, d); 
double result = floor(t * multiplier)/multiplier; 
cout << fixed << setprecision(d) << result << endl; 
+0

ありがとうございますが、四捨五入せずに答えを出すための関数が1つしかありません。 –

+0

あるかもしれません。あなたは検索する必要があります。これは私が思いつくことができる最高です。 – user3286661

関連する問題