加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 理解std :: fmod和std :: remainder

发布时间:2020-12-16 07:24:26 所属栏目:百科 来源:网络整理
导读:有人可以解释 std::fmod和 std::remainder功能的工作原理.在std :: fmod的情况下,有人可以解释如何显示以下步骤: std::fmod(+5.1,+3.0) = 2.1 对于std :: remainder来说也是如此,它会产生负面结果. std::remainder(+5.1,+3.0) = -0.9std::remainder(-5.1,+3
有人可以解释 std::fmod和 std::remainder功能的工作原理.在std :: fmod的情况下,有人可以解释如何显示以下步骤:

std::fmod(+5.1,+3.0) = 2.1

对于std :: remainder来说也是如此,它会产生负面结果.

std::remainder(+5.1,+3.0) = -0.9
std::remainder(-5.1,+3.0) = 0.9

解决方法

作为 std::fmod的参考状态:

由该函数计算的除法运算x / y的浮点余数恰好是值x-n * y,其中n是x / y,其小数部分被截断.

返回值与x具有相同的符号,并且大小小于y.

因此,在问题中,当x = 5.1和y = 3.0时,
截止的小数部分的x / y(5.1 / 3.0 = 1.7)是1.因此n是1.因此fmod将产生x-1 * y,其为5.1-1 * 3.0,其为5.1-3.0,即2.1.

并且参考状态为std::remainder:
由该函数计算的除法运算x / y的IEEE浮点余数恰好是值x-n * y,其中值n是最接近精确值x / y的积分值.当| n-x / y | =?,值n选择为偶数.

因此,在问题中采用例子,当x = 5.1且y = 3.0时
x / y(1.7)的最接近的整数值是2.因此n是2.因此,余数将产生x-2y,其为5.1-2 * 3.0,其为5.1-6.0,即-0.9.

但是当x = -5.1且y = 3.0时
x / y(-1.7)的最接近的整数值是-2.所以n是-2.因此剩余部分将产生x-2y,其为-5.1-(-2)* 3.0,其为-5.1 6.0,其为0.9

该引用还指出:与std :: fmod()相反,返回的值不能保证与x具有相同的符号.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读