不使用比较运算符比较两个数字

标签 c comparison comparison-operators

作为我正在为作业编写的程序的一部分,我需要比较两个数字。本质上,该程序计算给定两个轴的椭圆的偏心率,并且必须将计算出的偏心率值与月球绕地球轨道和地球绕太阳轨道的(给定)偏心率进行比较。如果计算出的偏心率大于给定的偏心率,则需要用值1表示,否则用值0表示。所有这些值都是浮点值,特别是 long double

赋值的约束不允许我使用比较运算符(如 >)或任何类型的逻辑(!xif-else)。但是,我可以使用 math.h 库中的 powsqrt 函数。我还可以使用算术运算以及模运算。

我知道,如果分母大于分子,我可以利用整数除法来截断小数,:

int x = 偏心率/MOON_ORBIT_ECCENTRICITY;

...如果MOON_ORBIT_ECCENTRICITY大于偏心率,则将为0。但是,如果这种关系颠倒,则 x 的值可以是任何非零整数。在这种情况下,所需的结果是 1

第一个也是最直观(也是天真的)的解决方案是:

int y = (x/x);

如果x非零,则返回1。但是,如果 x0,那么我的程序会因除以零而崩溃。事实上,我一直遇到除以零的问题。这种情况也会发生在以下情况:

int y = (x + 1) % x;

有人知道如何解决这个问题吗?这看起来非常简单。

最佳答案

@lurker上面的评论是一个很好的处理方法eccentricity受 OP 限制。
为了避免复制这一点,请考虑以下不太严重的内容:

<小时/>
// 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);
}

眨眼,眨眼:OP 只字未提 <stdio.h>功能。

关于不使用比较运算符比较两个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28240223/

相关文章:

c - ebpf - 部分名称

Python 字符串比较不匹配正斜杠

Postgresql NOT NULL AND <> '' 与 NOT NULL OR <> ''

c - 如何使 gcc 报告 int 到 uint 转换

c - 有没有不是C++的 "C with classes"语言?

c - 为什么我不能在代码中添加有关对学生评分的其他字符?

google-maps-api-3 - Google map api 与 Bing map api 2012

PHP 将当前数组值与前一个值进行比较

javascript - 为什么 new String ('hello' ) === new String ('hello' ) 计算结果为 False?

JavaScript 相等传递性很奇怪