【问题标题】:How does fmod() in c work compared with matlab mod()?与 matlab mod() 相比,c 中的 fmod() 如何工作?
【发布时间】:2017-02-09 08:36:40
【问题描述】:

在matlab代码中

    Longitude =  mod(-1789.8916,360);

返回值 10.108325

但在 C 代码中

    Longitude = fmod(-1789.8916,360);

返回值 -349.8916

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

【问题讨论】:

    标签: c matlab fmod mod


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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
      

      解释:

      a 为正时,sign(a)1,或当a 为负时-1

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-02
        • 2012-02-28
        • 2015-04-08
        • 2011-04-04
        • 1970-01-01
        • 2017-07-12
        • 2011-06-01
        • 2022-01-25
        相关资源
        最近更新 更多