我最讨厌 C 派生语言(作为数学家)之一是
(-1) % 8 // comes out as -1, and not 7
fmodf(-1,8) // fails similarly
最好的解决方案是什么?
C++ 允许模板和运算符重载的可能性,但对我来说,这两者都是浑水。收到的例子很感激。
原文由 P i 发布,翻译遵循 CC BY-SA 4.0 许可协议
我最讨厌 C 派生语言(作为数学家)之一是
(-1) % 8 // comes out as -1, and not 7
fmodf(-1,8) // fails similarly
最好的解决方案是什么?
C++ 允许模板和运算符重载的可能性,但对我来说,这两者都是浑水。收到的例子很感激。
原文由 P i 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
首先,我想指出,您甚至不能依赖
(-1) % 8 == -1
的事实。您唯一可以依靠的是(x / y) * y + ( x % y) == x
。但是,余数是否为负是 _实现定义的_。参考:C++03 第 5.6 段第 4 条:
这里它遵循一个处理两个负操作数的版本,以便从 除数 中减去 余 数的结果可以从 被除数 中减去,因此它将是实际除法的 _下限_。
mod(-1,8)
结果为 7,而mod(13, -8)
为 -3。