C 当x接近某个值时的If语句
我正在尝试求解数值方程: sin^2(x)tan(x)=0.499999 在C中使用while循环。 然而,若我四舍五入到0.5,我只能让程序打印答案。这让我想到,有没有一种写作方式:C 当x接近某个值时的If语句,c,if-statement,for-loop,floating-point,C,If Statement,For Loop,Floating Point,我正在尝试求解数值方程: sin^2(x)tan(x)=0.499999 在C中使用while循环。 然而,若我四舍五入到0.5,我只能让程序打印答案。这让我想到,有没有一种写作方式: For(x=0;x<=360;x=x+0.001) { y=f(x) If(y **is near x**(e.g. Within 1 percent) ) Do something etc. } 对于(x=0;x使用相对差异,例如: #include <math.h> static inl
For(x=0;x<=360;x=x+0.001)
{ y=f(x)
If(y **is near x**(e.g. Within 1 percent) )
Do something etc.
}
对于(x=0;x使用相对差异,例如:
#include <math.h>
static inline double reldiff(double x, double y)
{
return fabs(x - y) / fmax(fabs(x), fabs(y));
}
#包括
静态内联双reldiff(双x,双y)
{
返回晶圆厂(x-y)/fmax(晶圆厂(x),晶圆厂(y));
}
现在,您的测试变成:
if (reldiff(x, y) < 0.01) // 1% as requested
if(reldiff(x,y)<0.01)//1%
使用相对差异,例如:
#include <math.h>
static inline double reldiff(double x, double y)
{
return fabs(x - y) / fmax(fabs(x), fabs(y));
}
#包括
静态内联双reldiff(双x,双y)
{
返回晶圆厂(x-y)/fmax(晶圆厂(x),晶圆厂(y));
}
现在,您的测试变成:
if (reldiff(x, y) < 0.01) // 1% as requested
if(reldiff(x,y)<0.01)//1%
好吧,一个简单的解决方案是
if (y >= x-x/100 && y <= x+x/100)
{
[execute code...]
}
如果(y>=x-x/100&&y那么,一个简单的解决方案就是
if (y >= x-x/100 && y <= x+x/100)
{
[execute code...]
}
if(y>=x-x/100&&y在上下文中搜索epsilon。例如,if(fabs(x-y)
Near可能意味着给定一些e,| y-x |@风向标:如果x
为0.0002,y为0.0001,你的测试是正确的,但差异是50%,而不是问题中要求的1%。@JonathanLeffler是的,我的评论不是一个答案,而是一种建议的方法,一种绝对方法,而不是你答案中的比例方法。Goo例如,if(fabs(x-y)
Near可能意味着给定一些e,| y-x |@风向标:如果x
为0.0002,y为0.0001,你的测试是正确的,但差异是50%,而不是问题中要求的1%。@JonathanLeffler是的,我的评论不是答案,而是建议的方法,绝对方法,而不是你答案中的比例方法。