结果没有意义
remquo Results Not Making Sense
我在这里读到remquo
应该返回:
如果成功,则返回 std::余数中定义的除法
x/y
的浮点余数,以及符号为x/y
符号且大小为全等模 2n 的值 到x/y
的积分商的大小,其中 n 是大于或等于 3 的实现定义的整数。
现在很明显,我误解了所有这些技术语言,因为我认为我会得到除法的分数结果。相反,此操作:
int quot;
const float rem = remquo(7.0F, 4.0F, ");
将quot
设置为 2,将rem
设置为 -1.0!我可以看到这是有效的,因为 4.0 * 2 = 8.0 和 7.0 - 8.0 = -1.0。但是为什么我们使用会导致负rem
的quot
?我不应该得到 1 的quot
和 3.0 的rem
吗?
由于你的问题是关于remquo
返回的值,它完全是关于std::remainder
的,因为remquo
行为的那部分被直接定义为与std::remainder
的行为相同。
std::remainder
提供了 IEEE 754 余数运算,它与fmod
的不同之处在于,两个正值的fmod
可以预期始终为正,而 IEEE 754 余数相对于整数商q
定义为最接近数学商 x/y 的整数,因此每次数学商向上舍入到下一个整数时remainder = x - y*q
都会产生负结果。
IEEE 754余数操作是问题"Math.IEEERemainder返回负结果"中讨论的操作,因此您可能希望阅读它和接受的答案,尽管它们是关于不同的编程语言。
注意:规范中关于商的部分是"全等模 2n 与积分商的大小"只是意味着你没有得到整个积分商,这确实可能不适合int
类型(想想remquo(FLT_MAX, 1.0f, ...)
。相反,您将获得一个实现定义的整数商的最低有效位数。您获得的实现定义的位数必须至少为 3,但可以更多。
行为是正确的;如 std::remainder 中所述,商四舍五入到最接近的整数,则余数可能是负数。
如果你正在使用整数,我建议你使用 C 函数div((
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- API 返回智能指针的 std::optional 以明确指定指针可能为 null 是否有意义?
- 从头开始为应用程序创建 docker 映像是否有意义?
- 在c++中,如果首先禁止默认构造,那么禁止复制构造有意义吗
- 为什么我在这个模板上有随机结果?
- sizeof(函数)有意义吗?
- 二进制模式 + 格式化文本操作或文本模式 + 二进制数据操作 - 有意义吗?
- 插入向量时,使用lambda的返回而不是函数的返回是否有意义?
- 在 C++17 中使用 const std::string& 参数有意义吗?
- 基础类模板参数的有意义名称
- 内联这个函数,确实有意义
- 将 final 关键字添加到没有基类(未派生)的类中的虚函数是否有意义
- 为什么会有这个结果
- 左移负整数为零是否有意义?
- 是否有一个上下文表达式`a.b :: c`有意义
- 是否有一些有意义的统计数据来证明保持有符号整数算术溢出未定义是合理的
- 将可选与reference_wrapper相结合是否有意义?
- 函数返回rvalue参考是否有意义
- 将 [[noreturn]] 添加到主函数是否有意义
- 存储三角函数调用的结果是否有意义