代码之家  ›  专栏  ›  技术社区  ›  DemiSheep

有没有像MATLAB的舍入函数那样的C舍入函数?

  •  4
  • DemiSheep  · 技术社区  · 14 年前

    我需要一个C舍入函数,它像MATLAB的舍入函数一样对数字进行舍入。有吗?如果您不知道MATLAB的round函数是如何工作的,请参见以下链接:

    MATLAB round function

    我在想,我可以写我自己的简单的圆函数来匹配MATLAB的功能。

    谢谢,

    半羊

    6 回复  |  直到 7 年前
        1
  •  2
  •   Mr_Spock    14 年前

    如果没有 round() 函数中的函数,如果处理浮点数,可以任意计算每个值,分析要舍入到的位置之后的位置中的数字,检查是否大于、等于或小于5;然后,如果值小于5,则可以 floor() 你最终看到的数字。如果要舍入到的位置后面的数字值为5或更大,则可以继续使用函数 楼层() 要计算的数字,然后加1。

    我为与此相关的任何低效表示歉意。

        2
  •  7
  •   nos    14 年前

    这听起来和 round() 来自math.h的函数

    这些职能应围绕其职责 最接近整数值的参数 不考虑当前舍入

    还有 lrint ()这会给您一个int返回值,尽管lrint()和friends遵循当前的舍入方向-您必须使用 fesetround here .

        3
  •  3
  •   DevSolar    14 年前

    <fenv.c> ,特别是 fesetround() FE_DOWNWARD , FE_TOWARDZERO , FE_TONEAREST FE_UPWARD . 这控制浮点值如何舍入为整数。确保您的实现(即C编译器/C库)确实支持这一点(通过检查 fesetround() 以及实现的文档)。

    <math.h> ):

    • llrint()
    • llrintf()
    • llrintl()
    • lrint()
    • lrintf()
    • lrintl()
    • rint()
    • rintf()
    • rintl()
    • llround()
    • llroundf()
    • llroundl()
    • lround()
    • lroundf()
    • lroundl()
    • nearbyint()
    • nearbyintf()
    • nearbyintl()

    注意 : round() , roundf() roundl() 就像他们属于上面的名单,但这三个 遵守由设置的舍入模式 fesetround()

    有关详细信息,请参阅您最喜欢的标准库文档。

        4
  •  3
  •   Jerry Coffin    14 年前

    round 功能。典型的方法如下:

    double sign(double x) { 
        if (x < 0.0)
            return -1.0;
        return 1.0;
    }
    
    double round(double x) { 
        return (long long)x + 0.5 * sign(x);
    }
    

    long long . 如果你想四舍五入到小数点后一个特定的位数,那可能会有点困难。如果数字不是太大或太小,你可以乘以10 ,四舍五入为整数,然后除以10 再次强调(请记住,这可能会引入自身的舍入错误)。

        5
  •  1
  •   rano    14 年前

    如果我没搞错的话,你在找 floor and ceil 你会发现他们 <math.h>

        6
  •  0
  •   André Caron    14 年前

    文件规定

    不是复数:根据常规的MATLAB操作,它对矩阵的所有元素都进行操作。上面列出的C等价物一次只处理一个值。 如果 你可以使用C++,签出 Valarray