l的平方和2*l的横坐标交点
#include <stdio.h>#include <math.h>
void main()
{
double l, a, b;
for(l = 0.1; l <= 5; l=l+0.1)
{
a = l*l;
b = 2*l;
if(a==b)
{printf("%lf, %lf, %lf\n", a, b ,l);}
}
}
代码如上,按理说应该输出4.000000,4.000000, 2.000000,可结果却什么也没有,请问为什么呢? #include<stdio.h>
#include<math.h>
void main()
{
double l, a, b;
for(l = 0.1; l <= 5; l+=0.1)
{
a = l*l;
b = 2*l;
#if(0)
浮点相等不能够用==判断
需要用数学公式fabs计算它们差的绝对值,
1e-6就是10的-6次方=0.000001
fabs(a-b)这个是ab差的绝对值,
如果小于0.000001也就是精度,
就判断为真。
这样就可以输出,4.0000和2.000了!
#endif
if(fabs(a-b)<1e-6)
{
printf("%lf, %lf, %lf\n", a, b,l);
}
}
} hongwei8858 发表于 2020-3-12 00:09
#include
#include
#include <stdio.h>
#include <math.h>
#define PI 3.14
#define G 9.80
void main()
{
double l, T, h, a;
T = 5.5;
h = 1000;
a = (G*h*h* tanh( (2*PI*1000)/l))/(2*PI);
for(l = 0.1; l <= 200; l = l+0.1)
{
if(fabs(a-l)<1e-6)
{
printf("%lf", l);
}
}
}
不知道大佬能不能看懂这个程序,这是我自己用C编写的一个算水波波长的一个程序,我用那个matlab 软件验证了一下,这两个函数交点横坐标大概是40多,可是程序这次还是没运行成功,望大佬指点,学渣讲感激不尽。{:5_111:}
懵,你这个写的有问题呀,a-l的绝对值,永远不可能小于0.000001呀 a的值是1560509.554140-200你能让他俩的绝对值小于0.000001么?不可能的,是不是计算a的计算公式你写错了? hongwei8858 发表于 2020-3-12 11:29
懵,你这个写的有问题呀,a-l的绝对值,永远不可能小于0.000001呀
就是说a和 l 没有交点吗 还有就是这个T=5.5;这就是个摆设呀。fabs(a-b)这个的意思是a-b=x 这个x是他俩的差用fabs求他差的绝对值,1e-6,这个就是所谓的精度,如果a-b差的绝对值小于精度1e-6,就会返回真。这个判断就成立了。
你这算水波波长的代码,a-l的绝对值,永远不可能小于0.000001,你可以自己先打印出来看看a和l的值。再看看是不是哪里错了。 wlp1818100227 发表于 2020-3-12 11:40
就是说a和 l 没有交点吗
是的,你这个计算方法,a和l不会有交点的! hongwei8858 发表于 2020-3-12 11:49
还有就是这个T=5.5;这就是个摆设呀。fabs(a-b)这个的意思是a-b=x 这个x是他俩的差用fabs求他差的绝对 ...
抱歉,我把这里面的一些参数弄错了,还是专业知识学的不够好,谢谢大佬,问题已经解决。
wlp1818100227 发表于 2020-3-12 12:54
抱歉,我把这里面的一些参数弄错了,还是专业知识学的不够好,谢谢大佬,问题已经解决。
能解决就好,略尽绵薄之力~!
页:
[1]