11.4作业

来源:互联网 发布:linux 挂载u盘 编辑:程序博客网 时间:2024/06/08 19:49

1.解释一下下面代码的输出。

console.log(0.1 + 0.2); //0.30000000000000004
console.log(0.1 + 0.2 == 0.3); //false

  1. 0.1 的二进制表示为 1.1001100110011001100110011001100110011001100110011001 1(0011)+ * 2^-4;
    当64bit的存储空间无法存储完整的无限循环小数,而IEEE 754 Floating-point采用round to nearest, tie to even的舍入模式,因此0.1实际存储时的位模式是0-01111111011-1001100110011001100110011001100110011001100110011010;
    0.2 的二进制表示为 1.1001100110011001100110011001100110011001100110011001 1(0011)+ * 2^-3;
    当64bit的存储空间无法存储完整的无限循环小数,而IEEE 754 Floating-point采用round to nearest, tie to even的舍入模式,因此0.2实际存储时的位模式是0-01111111100-1001100110011001100110011001100110011001100110011010;
    实际存储的位模式作为操作数进行浮点数加法,得到 0-01111111101-0011001100110011001100110011001100110011001100110100。转换为十进制即为0.30000000000000004。

  2. 十进制0.1
      => 二进制0.00011001100110011…(循环0011)
      =>尾数为11001100110011001100…1100(共52位,除了小数点左边的1),指数为-4(二进制移码为00000000010),符号位为0
      => 计算机存储为:0 00000000100 10011001100110011…11001
      => 因为尾数最多52位,所以实际存储的值为0.00011001100110011001100110011001100110011001100110011001
    而十进制0.2
      => 二进制0.0011001100110011…(循环0011)
      =>尾数为11001100110011001100…1100(共52位,除了小数点左边的1),指数为-3(二进制移码为00000000011),符号位为0
      => 存储为:0 00000000011 10011001100110011…11001
      因为尾数最多52位,所以实际存储的值为0.00110011001100110011001100110011001100110011001100110011
    那么两者相加得:
      0.00011001100110011001100110011001100110011001100110011001
      + 0.00110011001100110011001100110011001100110011001100110011 (确认??)
      = 0.01001100110011001100110011001100110011001100110011001100
      转换成10进制之后得到:0.30000000000000004

2.MySQL 编程题

表名 student_score

name course score
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
查询出「张」姓学生中平均成绩大于 75 分的学生信息。

DROP TABLE IF EXISTS student_score;CREATE TABLE student_score(    id INT PRIMARY KEY AUTO_INCREMENT,    name varchar(50) NOT NULL,    course varchar(50) NOT NULL,    score varchar(50) NOT NULL)INSERT INTO student_score (name,course,score) VALUES ('张三','语文',81);INSERT INTO student_score (name,course,score) VALUES ('张三','数学',76);INSERT INTO student_score (name,course,score) VALUES ('李四','语文',76);INSERT INTO student_score (name,course,score) VALUES ('李四','数学',90);INSERT INTO student_score (name,course,score) VALUES ('王五','语文',81);INSERT INTO student_score (name,course,score) VALUES ('王五','数学',100);INSERT INTO student_score (name,course,score) VALUES ('王五','英语',90);INSERT INTO student_score (name,course,score) VALUES ('张柳','英语',90);INSERT INTO student_score (name,course,score) VALUES ('张柳','语文',90);SELECT *,AVG(score)FROM student_scoreWHERE name LIKE '张%'GROUP BY name HAVING  AVG(score) >75;

3.java

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。(Java)。

public class d20171104 {    public static void main(String[] args) {        fun(10,1);    }    // 方法 i = day j 剩余的桃子    public static void fun(int i, int j) {        int sum = j;        while (i != 1) {            i--;            sum = 2 * (sum + 1);        }        System.out.println(sum);    }
原创粉丝点击