与matlab mod()相比,c中的fmod()如何工作?

How does fmod() in c work compared with matlab mod()?

在 matlab 代码中

    Longitude =  mod(-1789.8916,360);

returns 值 10.108325

但在 C 代码中

    Longitude = fmod(-1789.8916,360);

returns值-349.8916

我想要与 C 代码中相同的值

matlab mod 函数总是 return 一个正值,但是 C fmod 函数(至少从 C11 开始)将 return 一个负值,如果第一个论据是否定的。 (在以前的 C 标准中,否定参数的精确行为取决于实现)。

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

mod 函数始终 returns 在 MATLAB 中为正值,从 C11 fmod returns 如果第一个参数为负,则为负值。

您可以使用此函数在 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)a为正数时为1,或当a为负数时-1

(sign(a) - 1)/2 因此分别是 0-1

如果 a 为负数,这会导致从结果中减去 b,得到所需的结果范围 [-b, b).