【问题标题】:What represents Math.IEEERemainder(x,y) in C++?什么代表 C++ 中的 Math.IEEERemainder(x,y)?
【发布时间】:2009-12-28 23:15:29
【问题描述】:

Math.IEEERemainder(x,y) 在 C++ 中代表什么?

【问题讨论】:

    标签: c++


    【解决方案1】:

    试试fmod 函数。

    【讨论】:

    • +1。 “使用模数运算符”的效果的答案错过了模数与 fmod 不同的操作这一点。
    • 用 C# 用 18 个字符来表达 C++ 可以用 4 个字符来表达。这就像一个寓言。
    • @Crashworks:确实。 C# 使用 18 个字符来清楚地表达意图,而 C++ 含糊其词的听起来像是诅咒。
    • 除了Remainder表达的功能比fmod好得多。编辑:迈克尔的忍者。
    • fmod 是具有不同数值属性和应用的不同函数。在不解释差异的情况下指出它是不够的(无论如何我们现在有std::remainder)。
    【解决方案2】:

    在 C++11 标准库中,std::remainder(x,y) 现在是 C# 在 C++ 中的 Math.IEEERemainder(x,y) 的等效函数。

    发件人:http://en.cppreference.com/w/cpp/numeric/math/remainder

    计算浮点除法运算的 IEEE 余数 x/y

    IEEE 余数是x–(round(x/y)*y)

    fmod 的余数是x - trunc(x/y)*y,这可能会导致不同的答案,例如在这个问题中提出的:Why am I getting a different result from std::fmod and std::remainder

    如果你真的想得到 IEEE 定义的余数,你需要std::remainder(x,y)(或者如果你不能使用 C++11,你可以定义你自己的函数)

    【讨论】:

      【解决方案3】:

      虽然标记为答案,但SLak的答案并不正确。

      是的,两者都计算模数,但它们在处理符号的方式上有所不同。 (即 John Feminella 是正确的)。可以在此处找到实现(以及指向 MSDN 文档的链接):

      Is Math.IEEERemainder(x,y) equivalent to x%y?

      请注意,IEEERemainder() 函数以 IEEE 标准方式实现模数 - 而不是 K&R 在 70 年代初所想的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多