zoukankan      html  css  js  c++  java
  • 向上取整与向下取整

    向上向下取整函数数只会对小数点后面的数字不为零的数进行操作,要是给它一个整数  它就返回整数本身.

    对小数不为零的数操作:
    向上取整 不管四舍五入的规则 只要后面有小数前面的整数就加1
    向下取整 不管四舍五入的规则 只要后面有小数忽略小数
    给定  4.9
    调用用向下取整函数 得到的是 4
    调用用向上取整函数 得到的是 5

    Word->插入->符号,在字体中选择Lucida Sans Unicode   子集选择数学运算符   就能找到向上
    、向下取整符号


    向下取整的运算称为Floor,用数学符号⌊⌋表示,与之相对的,向上取整的运算称为Ceiling,用数学符号⌈⌉表示。

    C语言定义的取整运算既不是Floor也不是Ceiling,无论操作数是正是负总是把小数部分截断(Truncate),所以当操作数为正的时候相当于Floor,当操作符为负的时候相当于Ceiling。

    网页分页常用到的一个分页算法

          假设变量x和n是两个正整数,我们知道x/n这个表达式的结果是取Floor,例如x是17,n是4,则结果是4。如果希望结果取Ceiling应该怎么写表达式呢?例如x是17,n是4,则结果是5,而x是16,n是4,则结果是4。

    #include <stdio.h>

    int main()
    {
        int x,n;

        printf("请输入数字:x n/n");
        scanf("%d %d",&x,&n);
        printf("x/n 向上取整的结果:%d/n",(x+n-1)/n);
        printf("x/n 向上取整方法二:%d/n",(int)(((float)x/(float)n)+0.9));
        return 0;
    }

    向下取整的运算称为Floor,用数学符号⌊⌋表示;向上取整的运算称为Ceiling,用数学符号⌈⌉表示。例如:

    ⌊59/60⌋=0
    ⌈59/60⌉=1
    ⌊-59/60⌋=-1
    ⌈-59/60⌉=0

      在C语言中整数除法取的既不是Floor也不是Ceiling,无论操作数是正是负总是把小数部分截掉,在数轴上向零的方向取整(Truncate toward Zero),或者说当操作数为正的时候相当于Floor,当操作数为负的时候相当于Ceiling。

    习题

      假设变量x和n是两个正整数,我们知道x/n这个表达式的结果要取Floor,例如x是17,n是4,则结果是4。如果希望结果取Ceiling应该怎么写表达式呢?例如x是17,n是4,则结果是5;x是16,n是4,则结果是4。

    习题的大意是如果X除N能除断,则结果为余数,如果X不能除断,则结果为余数加1。

    INT函数

      将数字向下舍入到最接近的整数,即取不大于自变量的最大整数,
    例如:int[6.4]=6 int[-9.7]= -10
    语法
    INT(number)
    Number 需要进行向下舍入取整的实数。
    示例
      如果将示例复制到空白工作表中,可能会更易于理解该示例。   

    A
    1 数据
    2 19.5
    公式 说明(结果)
    =INT(8.9) 将8.9向下舍入到最接近的整数(8)
    =INT(-8.9) 将-8.9向下舍入到最接近的整数(-9)
    =A2-INT(A2) 返回单元格A2中正实数的小数部分(0.5)

    类型标识符

       C/C++编程语言中,int表示整型变量,是一种数据类型,用于定义一个整型变量,在不同编译环境有不同的大小,不同编译运行环境大小不同,在但是 32/64位系统中都是32位,范围为-2147483648~+2147483647,无符号情况下表示为0~4294967295。

    网上搜索到结果如下:

    1、
    if((x%n)>0){result =x/n+1;}
    else{result=x/n;}

    2、
    (x+n-1)/n);

    3、
    (int)(((float)x/(float)n)+0.9))


    下面给出证明:

    1. 设x=kn,k为整数,即x为n的整数倍。则(x+n-1)/n=(kn+n-1)/n=((k+1)n-1)/n,此时分子没有达到n的k+1倍,但大于等于n的k倍,
    默认计算取下整则为k。符合要求。
    2.设x=kn+m,k为整数,m为整数且0<m<n。则(x+n-1)/n=(kn+m+n-1)/n=((k+1)n+m-1)/n。此时分子的大于等于(k+1)n,小于(k+2)n,
    按照默认计算应该为k+1。符合要求。
      向上取整和向下取整的代码实例:
    #include <math.h> 
    #include <stdio.h> 
    void main( void ) 
    {
    double y; 
    y = floor( 2.8 );
    printf( "The floor of 2.8 is %f ", y ); 
    y = floor( -2.8 ); 
    printf( "The floor of -2.8 is %f ", y ); 
    y = ceil( 2.8 );
    printf( "The ceil of 2.8 is %f ", y );
    y = ceil( -2.8 );
    printf( "The ceil of -2.8 is %f ", y ); 
    }

    Output 
    The floor of 2.8 is 2.000000 // 地板,就是取低 
    The floor of -2.8 is -3.000000 // 地板,就是取低,-3 比 -2.8 低 
    The ceil of 2.8 is 3.000000 // 天花板,就是取高 
    The ceil of -2.8 is -2.000000 // 天花板,就是取高,-2 比 -2.8高
      Word->插入->符号,在字体中选择Lucida Sans Unicode   子集选择数学运算符   就能找到向上、向下取整符号
    

    该习题解答如下:
    #include <stdio.h>
    int main()
    {
        int x,n;
        printf("请输入数字:x n ");
        scanf("%d %d",&x,&n);
        printf("x/n 向上取整的结果:%d ",(x+n-1)/n);
        return 0;
    }

    linux 系统下编译此程序步骤:
    将这个程序保存成main.c,然后编译执行:
    $ gcc main.c
    $ ./a.out

    gcc是Linux平台的C编译器,编译后在当前目录下生成可执行文件a.out,直接在命令行输入这个可执行文件的路径就可以执行它。如果不想把文件名叫a.out,可以用gcc的-o参数自己指定文件名:
     $ gcc main.c -o main
     $ ./main

  • 相关阅读:
    《程序员的数学课》模块二 代数与统计
    《程序员的数学课》模块一 无处不在的数学思维03
    Java 接口重试的几种实现
    用过stopwatch(秒表)观察代码运行的时长吗?
    sql 面试必刷系列-case-when
    缓存穿透、缓存击穿和缓存雪崩,了解一下?
    数据库批量插入100W 条数据,你学废了吗?
    缓冲输入流
    Linux系统中内存问题排查思路与解决方法
    Linux系统中负载较高问题排查思路与解决方法
  • 原文地址:https://www.cnblogs.com/xuhj001/p/3398608.html
Copyright © 2011-2022 走看看