2017-02-09 163 views

回答

2

该matlab mod函数总是返回一个正值,但C函数(至少从C11)将返回一个负值,如果第一个参数为负值。 (在之前的C标准中,针对否定论证的确切行为取决于实现)。

因此,如果第一个参数是负数且结果大于零,您可以通过在答案中减去360(在本例中)来转换matlab版本。

0

mod函数总是返回一个在MATLAB中的正值,从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 

说明:

sign(a)1a为正,或-1a为负。分别为0-1

如果a为负数,则会导致b从结果中减去,得到期望的结果范围[-b, b)