zoukankan      html  css  js  c++  java
  • 10%-3 = -2 取余运算详解

    背景:今天一个同学在看python看到一个问题 10%-3的结果是多少,我心中默默出现了1这个结果,

    因为很明显 10=(-3)*(-3).....1 ,但是,书上写的结果是-2;于此产生分歧。

    检验方法:首先,我是接受不能的,怎么可能呢,于是就写了一个方法测试一下,毕竟 talk is cheap ,show me the code.

    方法很简单,直接输出一下,不就行了嘛,

    System.out.println(10%-3);

    不出所料,结果为 1;

    难道书上写错了,秉承多次验证的严谨编程精神,我去询问了百度和我的高数老师[手动滑稽],然后发现没百度到,

    于是查了一下余数的定义:(https://baike.baidu.com/item/%E4%BD%99%E6%95%B0/6180737?fr=aladdin
    在整数的除法中,只有能整除与不能整除两种情况。当不能整除时,就产生余数,所以余数问题在小学数学中非常重要
    (划重点:小学数学。我对不起我的小学数学老师。)。

    另外百度买一送一,还有取余运算的定义。

    取余数运算:
    a mod b = c 表示 整数a除以整数b所得余数为c。
    余数的计算公式:c = a -⌊ a/b⌋ * b
    其中,⌊ ⌋为向下取整运算符,向下取整运算称为Floor,用数学符号⌊ ⌋表示

    敲黑板,重点,向下取整

    在这时,高数老师上场了,他给了具体的回应,按照这个定义 10对-3进行取整的结果 是 -4。

    此时的我一脸懵逼,不应该啊。默默敲了一个输出:
    System.out.println(10/(-3));
    对,秉承严谨的编程精神,我给-3加上了括号。然而并没有拯救我,结果是 -3。
    然后,老师就开始讲解概念:向下取整 ,-3点多 应该为 -4。 我默默打开了百度,java 向下取整。
    查询结果:
    向上取整用Math.ceil(double a)

    向下取整用Math.floor(double a)
    哦~,原来如此,验证一下,

    编写输出方法,System.out.println(Math.floor(10/(-3)));
    这下应该正确了吧。
    Native,输入结果 :-3.0;

    emmm,什么鬼,经过数学老师的讲解,再次感谢高数老师,对一个毕业的学生还有这么好的耐心[手动狗头]。

    正确的运算策略应该是:对10除以-3的运算结果,进行向下取整 ,也就是对 -3.33333进行向下取整,结果是 -4。
    带入取余公式:c = a -⌊ a/b⌋ * b --> c = 10 - (-4)*-3 = -2。
    综合起来就是:10 ÷ -3 = -4…-2 。
    unbelievable,可以百度一下余数,看一下余数的性质,验证一下,是否符合。

    这是一道严肃的编程题,所以在确定了运算策略后,重新设计输出:
    double x=10;
    double y= -3;
    System.out.println(x - Math.floor(x/y)*y);//取余运算公式
    输出结果为:-2.0
    呼~终于算对了。 这题的关键在于,是对 10除以-3的结果 也就是 -3.33333 进行 向下取整,结果为-4。

    之前的设计:System.out.println(Math.floor(10/(-3)));

    是对 10整除-3的结果 也就是-3 进行向下取整,所以结果为-3.0;

    所以,最后的结论就是:10除以-3 等于 -4 余 -2 。而我们java中取余运算,不能全部都靠取余运算符(%),小学数学知识还是很关键的。

    结语:
    emmmm,我真的对不起我的小学数学老师,当时应该好好学习的。[手动滑稽]

    感谢我的高数老师,为我排异解惑。[狗头]

    2018-10-22 00:01:34

  • 相关阅读:
    log4j 悟寰轩
    初学PHP 悟寰轩
    java基本语法注意问题 悟寰轩
    HTTP协议基础 悟寰轩
    SSHweb.xml详解 悟寰轩
    windows和linux查找被入侵后留下的后门文件 悟寰轩
    MFC Link problem
    Manually Walking a Stack
    linux试用(2)安装 mplayer, g++
    子集和问题
  • 原文地址:https://www.cnblogs.com/BigWrite/p/9827744.html
Copyright © 2011-2022 走看看