c - "Fixing"C中的大角度

标签 c

我需要能够比较 C 中 45 倍数的角度(始终以度为单位输入)。

我已经编写了基本角度 0,45,90,135,180... 的代码 但我也可以获得像 2070 这样的大角度,它与 90 相同。

我该怎么做? (抱歉,如果这是一个非常简单的问题,我只是开始讨论这个)

到目前为止,我已经尝试将角度转换为弧度并使用正弦函数。但问题是我无法使用 == 运算符来比较它们。

这是迄今为止我学会比较 C 语言中的值的唯一方法

double direction;
scanf("%d", &direction);

int x = sin(direction * 0.0174533);
//Wanted to use the == operator, so I thought I'd assign the sin to an int.

if (x == 1) {
    someInstruction();
}

问题是,当我将其转换为 int 时,该值变为 0 而不是 1。

最佳答案

如果您想比较角度,则无需计算角度的正弦值。实际上这会让你头疼,因为浮点值的精确相等有其自身的问题。我不会深入研究,如果您有兴趣,该研究可以作为练习留给您。

相反,我想向您介绍“modulo ”运算符。该运算符进行整数除法并返回余数。在 C 及其派生语言中,运算符是“%”。

因此,您让用户以整数形式输入角度并计算除以 360 的余数:int RM = input % 360;

示例:

input remainder
   0    0
 135  135
2070  270
3645   45 

关于c - "Fixing"C中的大角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58461702/

相关文章:

c - SIGSEGV 处理程序中的段错误

java - C 与 Java 原始转换和表达式

c - C 中检查登录信息的结构

c - 使用 AES-256 加密和解密

c - C中的进程循环

c++ - C 的标准库

c++ - 非 B 树数据结构,其中昆虫以排序的方式完成,但我可以稍后从随机位置删除对象

c - a[i] 真的和 C 中的 *(a + i) 一样吗?

可以将空字符传递给字符串中间的 argv 吗?

c - C11 _Atomic 说明符与限定符语法不规则的基本原理?