C 不使用比较运算符比较两个数字
作为我为作业编写的程序的一部分,我需要比较两个数字。本质上,该程序计算给定椭圆两轴的偏心率,并将计算出的偏心率值与(给定)月球绕地球轨道和地球绕太阳轨道的偏心率进行比较。如果计算的偏心距大于给定的偏心距,则需要用C 不使用比较运算符比较两个数字,c,comparison,comparison-operators,C,Comparison,Comparison Operators,作为我为作业编写的程序的一部分,我需要比较两个数字。本质上,该程序计算给定椭圆两轴的偏心率,并将计算出的偏心率值与(给定)月球绕地球轨道和地球绕太阳轨道的偏心率进行比较。如果计算的偏心距大于给定的偏心距,则需要用1值表示,否则,用0值表示。所有这些值都是浮点值,具体来说就是长双精度 赋值的约束条件不允许我使用比较运算符(如)或任何类型的逻辑(!x或如果其他)。但是,我可以使用math.h库中的pow和sqrt函数。我还可以使用算术运算和模运算 我知道如果分母大于分子,我可以利用整数除法截断小数,
1
值表示,否则,用0
值表示。所有这些值都是浮点值,具体来说就是长双精度
赋值的约束条件不允许我使用比较运算符(如
)或任何类型的逻辑(!x
或如果其他
)。但是,我可以使用math.h
库中的pow
和sqrt
函数。我还可以使用算术运算和模运算
我知道如果分母大于分子,我可以利用整数除法截断小数,即:
intx=偏心率/月球轨道偏心率代码>
。。。如果月球轨道偏心率
大于偏心率
,则将为0
。但是,如果将此关系反转,则x
的值可以是任何非零整数。在这种情况下,期望的结果是1
第一个也是最直观(也是最幼稚)的解决方案是:
inty=(x/x)代码>
如果x
非零,则返回1
。但是,如果x
为0
,则我的程序会因被零除而崩溃。事实上,我一直遇到被零除的问题。在以下情况下也会发生这种情况:
inty=(x+1)%x代码>
有人知道如何解决这个问题吗?这似乎很容易让人沮丧。上面的评论是一个很好的方法来处理OP限制的问题。
为了不复制,考虑下面的不太严重:
Wink,Wink:OP没有提到
功能。你检查过天花板和地板功能吗?如果你不允许使用控制语句,比如如果你应该如何使用比较结果?你可以使用位运算吗?要生成一个-1、0或1(小于、等于、大于)来比较两个数字,你可以使用(a-b)/fabs(a-b)
。作为提示,您可以使用pow
来避免0
值。即,操纵pow(2,x)
和power(2,y)
或pow(2,x-y)
这将显著降低您可以使用的x
或y的最大值(从max double到max double的log2),但应该可以让您达到目的。我找到了一个解决方案,但由于这是您的任务…:)
// Return e1 > e2
int Eccentricity_Compare(long double e1, long double e2) {
char buf[20];
// print a number beginning with
// if e2 >= e1: `+`
// else `-`
sprintf(buf, "%+Le", e2 - e1); // reverse subtraction for = case
const char *pm = "+-";
char *p = strchr(pm, buf[0]);
return (int) (p - pm);
}