首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fmod还是不fmod?

fmod还是不fmod?
EN

Stack Overflow用户
提问于 2015-11-10 14:21:18
回答 1查看 1.6K关注 0票数 8

我深入研究了旧代码,并看到了这样一个函数:

代码语言:javascript
复制
inline double mod(double x, double y)
{
    return x-y*floor(x/y);
}

fmod是完全等同的,还是我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-10 14:23:48

不,上面的例程它和fmod()不一样。具体而言,在一个论点是否定的情况下,情况就不同了。

您的例程执行一个floor(),这将转到下一个整数。对于fmod(),舍入类似于trunc(),即接近于零。

下面是开放组标准(这里)的摘录:

这些函数将返回值x- i* y,对于某些整数i,如果y为非零,则结果具有与x相同的符号,且小于y的大小。 如果正确的值会导致下溢,且无法表示,则可能会发生范围错误,或者0.0 (如果支持),或者返回实现定义的值。 如果xyNaN,则应返回NaN 如果y为零,则会发生域错误,或者返回一个NaN (如果支持),或者返回一个实现定义的值。 如果x是无限的,就会发生域错误,或者返回一个NaN (如果支持),或者返回一个实现定义的值。 如果x±0,而y不是零,则应返回±0。 如果x不是无限的,y是±Inf,则将返回x。 如果正确的值会导致下垫流,并且是可表示的,则可能会发生范围错误,并将返回正确的值。

这是很难理解的,但第一段中的“大小”一词说明舍入接近于零。

下面是GCC图书馆更有用的文档的摘录:

这些函数计算分子除以分母的余数。具体来说,返回值是numerator - n * denominator,其中nnumerator除以denominator的商,四舍五入为整数。因此,fmod ( 6.5,2.3)返回1.9,即6.5减去4.6。

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

https://stackoverflow.com/questions/33632157

复制
相关文章

相似问题

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