Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当x接近某个值时的If语句_C_If Statement_For Loop_Floating Point - Fatal编程技术网

C 当x接近某个值时的If语句

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

我正在尝试求解数值方程:

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 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是的,我的评论不是答案,而是建议的方法,绝对方法,而不是你答案中的比例方法。