Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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 角度数学,规格化为[-180180]和mod vs rements()_C_Mod - Fatal编程技术网

C 角度数学,规格化为[-180180]和mod vs rements()

C 角度数学,规格化为[-180180]和mod vs rements(),c,mod,C,Mod,我需要通过加或减360将双/浮动角度转换为[-180180]的范围。余数函数可以工作,但我不知道为什么 x = remainder (x, 360); 为什么这会产生[-180180]的范围而不是[0359.99999…] 我知道余数和mod对于正数是一样的,但是对于负数它们的工作方式不同。。。我只是没有看到一个很好的解释 当然,我很高兴这能奏效,但我真的不明白为什么。摘自: 通过此函数计算的除法运算的IEEE浮点余数x/y正好是值x-n*y,其中值n是最接近精确值x/y的整数值。当| n-x

我需要通过加或减360将双/浮动角度转换为[-180180]的范围。余数函数可以工作,但我不知道为什么

x = remainder (x, 360);
为什么这会产生[-180180]的范围而不是[0359.99999…]

我知道余数和mod对于正数是一样的,但是对于负数它们的工作方式不同。。。我只是没有看到一个很好的解释

当然,我很高兴这能奏效,但我真的不明白为什么。

摘自:

通过此函数计算的除法运算的IEEE浮点余数
x/y
正好是值
x-n*y
,其中值
n
是最接近精确值
x/y
的整数值。当| n-x/y |=½时,值
n
被选择为偶数

fmod()
相反,返回值不保证与
x
具有相同的符号

如果返回值为0,则其符号与x相同

这里发生的是函数
余数(x,y)
舍入到最接近的整数值,乘以y,然后从x中减去结果

例如:

remainder(160.0f, 360.0f)

result = 160 - round(160.0f / 360.0f) * 360
result = 160 - round(0.44f) * 360
result = 160 - (0 * 360)
result = 160.0f
例2:

remainder(190.0f, 360.0f)

result = 190 - round(190.0f / 360.0f) * 360
result = 190 - round(0.53f) * 360
result = 190 - (1 * 360)
result = -170.0f

因此,根据输入变量,最终可能会出现负数。

将角度转换为[-pi,+pi]范围的惯用方法是
atan2(sin(x),cos(x))
。只是说..仅供参考,我将任何角度转换为+/-180的一般方法是:
(角度%360+360)%360-180
另一种方法(通过避免负余数简化推理)是
(角度+540)%360-180
。这只有一个部门,而不是两个部门。