11.4作业

本文解析了0.1+0.2为何不等于0.3的浮点数运算原理,并通过具体例子展示了IEEE754标准下数值的存储方式。此外,还介绍了如何使用MySQL查询姓张学生的平均成绩超过75分的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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_score
WHERE 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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值