【问题标题】:C# equivalent of IEEE 754 remainder()?C# 等效于 IEEE 754 余数()?
【发布时间】:2015-09-27 12:03:32
【问题描述】:

在 C# 中,是否存在与 C99 / IEEE 754 的 remainder() 函数完全等效的函数?

C# language specification saysoperator %(double x, double y)“类似于用于整数操作数,但不同于 IEEE 754 定义(其中n 是最接近x / y 的整数)”。

举个不同的例子,这个 C# 程序输出两个 1:

using System;

public class Test
{
    public static void Main()
    {
        Console.WriteLine(5.0 % 2.0);
        Console.WriteLine(3.0 % 2.0);
    }
}

http://ideone.com/GBITYq

而类似的 C 程序输出 1 和 -1:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    printf("%f\n", remainder(5.0, 2.0));
    printf("%f\n", remainder(3.0, 2.0));
    return EXIT_SUCCESS;
}

http://ideone.com/HpuIVr

【问题讨论】:

标签: c# .net c99 ieee-754 modulus


【解决方案1】:

此方法实现 IEEE 754 余数算法:

Math.IEEERemainder(double, double)

public class Test
{
    public static void Main()
    {
        Console.WriteLine(Math.IEEERemainder(5.0, 2.0));
        Console.WriteLine(Math.IEEERemainder(3.0, 2.0));
    }
}

// Output: 1, -1

http://ideone.com/b2Lvfx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    相关资源
    最近更新 更多