在matlab代码中
Longitude = mod(-1789.8916,360);
返回值10.108325
但在C代码中
Longitude = fmod(-1789.8916,360);
返回值-349.8916
我希望该值与c代码中的值相同。
发布于 2017-02-09 08:39:42
matlab的mod
函数总是返回一个正值,但是如果第一个参数是负的,那么C fmod
函数(至少来自C11 )将返回一个负值。(在以前的C标准中,否定参数的精确行为取决于实现)。
因此,如果第一个参数为负并且结果大于零,则可以通过从答案中减去360 (在本例中)来转换matlab版本。
发布于 2017-02-09 10:38:38
在MATLAB中,mod
函数始终返回正值,如果第一个参数为负,则from C11 fmod
将返回负值。
您可以使用此函数在MATLAB中模拟fmod
的行为。
function m = fmod(a, b)
% Where the mod function returns a value in region [0, b), this
% function returns a value in the region [-b, b), with a negative
% value only when a is negative.
if a == 0
m = 0;
else
m = mod(a, b) + (b*(sign(a) - 1)/2);
end
end
解释:
当a
为正时,sign(a)
为1
;当a
为负时,为-1
。
因此,(sign(a) - 1)/2
分别为0
或-1
。
如果a
为负,这会导致从结果中减去b
,从而得到所需的结果范围[-b, b)
。
https://stackoverflow.com/questions/42131702
复制