您可能需要注意:
C 标准 7.12.1 [ISO/IEC 9899:2011] 定义了三种类型的错误,这些错误与 .第 2 段状态
如果输入参数域外超过,则会发生域错误
定义了数学函数。
第 3 段状态
如果极点误差(也称为奇点或无穷大),则发生
数学函数具有精确的无限结果作为有限输入
参数接近极限。
第 4 段状态
如果函数的数学结果不能
在指定类型的对象中表示,由于极端
幅度。
函数pow(x,y)的可用域是:
(x > 0) || (x == 0 && y > 0) || (x < 0 && y is an integer)
这意味着您不能使用r = 0 作为pow 的参数。
1)
pow(r, -1.5) = r^(-3/2) = 1.0/ r^3/2 = 1.0/sqrt(r*r*r);
2) C 语言
main 函数应该返回 int 值并接受 void 而不是空括号 ()
3) 递增操作可以通过r = r + 0.2 或r += 0.2 完成
4) 为了避免在(r-1)/r 中被零除,必须使用接近0 的值。
5) 为了不丢失double 精度,变量f 也应该声明为double。
6) f 对r=0 的值极难计算。对于r = 0,该算法在数值上不稳定。我们有两个无穷大的除法。解决它的正确方法是在点0+ 处找到函数限制。在数值上,将r 设置为接近0 就足够了。
7) 由于f 函数的性质,您可以考虑为r 设置更小的步长,以便捕获更好的图。
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define ZERO_PLUS 1e-14
void calculate_and_print(double r)
{
double f, f1;
f = r - pow(r, -1.5) * exp(2.5*(r-1)/r);
f1 = r - (1.0 /sqrt(r*r*r)) * exp(2.5*(r-1)/r);
printf("Value of f for r= %f is f= %f f1= %f \n", r, f, f1);
}
int main(void)
{
clrscr();
calculate_and_print(ZERO_PLUS);
for (double r = 0.2; r < 5.0; r += 0.2 )
calculate_and_print(r);
calculate_and_print(5.0);
return 0;
}
测试:
Value of f for r= 0.000000 is f= 0.000000 f1= 0.000000
Value of f for r= 0.200000 is f= 0.199492 f1= 0.199492
Value of f for r= 0.400000 is f= 0.307038 f1= 0.307038
Value of f for r= 0.600000 is f= 0.193604 f1= 0.193604
Value of f for r= 0.800000 is f= 0.051949 f1= 0.051949
Value of f for r= 1.000000 is f= 0.000000 f1= 0.000000
Value of f for r= 1.200000 is f= 0.046058 f1= 0.046058
Value of f for r= 1.400000 is f= 0.166843 f1= 0.166843
Value of f for r= 1.600000 is f= 0.338256 f1= 0.338256
Value of f for r= 1.800000 is f= 0.542116 f1= 0.542116
Value of f for r= 2.000000 is f= 0.765977 f1= 0.765977
Value of f for r= 2.200000 is f= 1.001644 f1= 1.001644
Value of f for r= 2.400000 is f= 1.243810 f1= 1.243810
Value of f for r= 2.600000 is f= 1.489073 f1= 1.489073
Value of f for r= 2.800000 is f= 1.735278 f1= 1.735278
Value of f for r= 3.000000 is f= 1.981075 f1= 1.981075
Value of f for r= 3.200000 is f= 2.225642 f1= 2.225642
Value of f for r= 3.400000 is f= 2.468498 f1= 2.468498
Value of f for r= 3.600000 is f= 2.709387 f1= 2.709387
Value of f for r= 3.800000 is f= 2.948194 f1= 2.948194
Value of f for r= 4.000000 is f= 3.184898 f1= 3.184898
Value of f for r= 4.200000 is f= 3.419535 f1= 3.419535
Value of f for r= 4.400000 is f= 3.652177 f1= 3.652177
Value of f for r= 4.600000 is f= 3.882916 f1= 3.882916
Value of f for r= 4.800000 is f= 4.111856 f1= 4.111856
Value of f for r= 5.000000 is f= 4.339103 f1= 4.339103
如果您还有其他问题,请告诉我。