首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与matlab mod()相比,c中的fmod()是如何工作的?

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

Stack Overflow用户
提问于 2017-02-09 16:36:41
回答 2查看 2.1K关注 0票数 1

在matlab代码中

代码语言:javascript
运行
复制
    Longitude =  mod(-1789.8916,360);

返回值10.108325

但在C代码中

代码语言:javascript
运行
复制
    Longitude = fmod(-1789.8916,360);

返回值-349.8916

我希望该值与c代码中的值相同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-09 16:39:42

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

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

票数 2
EN

Stack Overflow用户

发布于 2017-02-09 18:38:38

在MATLAB中,mod函数始终返回正值,如果第一个参数为负,则from C11 fmod将返回负值。

您可以使用此函数在MATLAB中模拟fmod的行为。

代码语言:javascript
运行
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42131702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档