#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
long long int factorial(long long int n)//Factorial Function
{
return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n;
}
int main()
{
float summ=0;
float x=0;
cout<<"Enter x value: "<<endl;
cin>>x;
float prespecified_error=0;
cout<<"Enter prespecified error: "<<endl;
cin>>prespecified_error;
float true_value=0;
true_value=exp(-x);
cout<<true_value<<endl;
float approx_error=10000000;
float true_error=10000000;
int i=0;
float prev_value=0;
cout<<"Value"<<setw(10)<<right<<"True error"<<setw(10)<<right<<"Approximate error"<<endl;//Output is not columned.
while((prespecified_error<=true_error) || (prespecified_error<=approx_error)){
summ=summ+(pow(-1,i)*(pow(x,i)/factorial(i)));
true_error=((true_value-summ)/true_value)*100;
if(true_error<0){
true_error=true_error*(-1);
}
approx_error=((summ-prev_value)/summ)*100;
if(approx_error<0){
approx_error=approx_error*(-1);
}
prev_value=summ;
cout<<summ<<setw(10)<<right<<true_error<<setw(10)<<right<<approx_error<<endl;//Output is not columned.
i=i+1;
}
return 0;
}
输出:::
0.00673795
Value True error Approximate error
1 14741.3 100
-4 59465.3 125
8.5 126051 147.059
-12.3333 183143 168.919
13.7083 203350 189.97
-12.3333 183143 211.149
9.36806 138934 231.653
-6.13294 91120.8 252.75
3.55518 52663.6 272.507
-1.8271 27216.6 294.58
0.86404 12723.5 311.461
-0.359208 5431.12 340.54
0.150479 2133.3 338.71
-0.0455546 776.09 430.326
0.0244573 262.978 286.262
0.00111998 83.378 2083.73
0.00841288 24.8582 86.6873
0.00626791 6.97596 34.2215
0.00686374 1.86688 8.68077
0.00670694 0.460185 2.33782
答案 0 :(得分:1)
在输出setw()
之前,您没有使用任何字段宽度控制(即没有summ
) ...之后您处于可变偏移位置并且让其他领域排队已经太晚了。只需有条不紊地处理输出语句,可能会输入'|'
或其他字符来显示输出的每个部分添加了多少右侧边距,这样您就可以集中精力让它们排成一行,然后在你有正确的字段宽度后删除它们。
答案 1 :(得分:0)
您尚未设置summ
的参数宽度。
std::cout << std::right
<< std::setw(10) << summ
<< std::setw(10) << true_error
<< std::setw(10) << approx_error << std::endl;
作为旁注,您只需指定std::right
一次