基本情况
共读总人数:69人(静默组:10人)
第一次线上研讨会实到:35 人(24人未到)
研讨会时间:21:08~22: 50
最优分享:第四组(422474744424464424432 12/21)
第 1-2 周打卡和心得体会回顾
第 1、2 周打卡情况
第一周
第一组:2人未打卡
静默组:1人未打卡
第二周
第三组:1人未打卡
第四组:1人未打卡
第五组:1人未打卡
静默组:3人未打卡
心得体会
- 【第 1 周】深入理解计算机系统共读心得体会
- 【第 2 周】深入理解计算机系统共读心得体会
YouTube 视频回看
研讨会基本流程
- 分享者必须准备演讲稿(Slides/PPT)
- 研讨会基本流程(耗时:约2小时)
- 分享环节:
- 从1-7组依次轮流进行分享,时长5~10分钟
- 每个分享结束后最多3个提问,时长5分钟以内;(大概60~90分钟)
- 全体参与研讨:20分钟
- 评选最优:10分钟
- 会议时间:21点~23点
研讨主题分享
- 浮点数杂谈
- 文件和二进制文件
- 工作中的浮点数
- 15 张图带你深入理解浮点数
- 无符号数的减法操作是如何实现的?
- 浮点数「精度有问题,尽量别用」的讨论,除了涉及到金钱不使用浮点数,其他情况并没有限制,「精度控制从来就不是用什么数据类型的问题」
自由分享交流
- 看书时间一般是在早上(晚上看不动);
- 先对自己提问,然后再带着问题去书中找答案;
- 不要一上来就直接看书,或者一直死看书;
- 可以看看 Bilibili CMU 视频课程;
- 一定要做练习题;
- 实验题能否组织刷一波?
线上研讨会小结
- 主题分享普遍反馈有收获
- 自由交流环节:积极性欠佳
- 投票环节:方式不佳,准备不足(应该提前准备好投票二维码或者链接)
浮点数相关
来自第 7 组
问题
package main
import "fmt"
func main() {
var a float32
a = 0.28
fmt.Printf("%032.23f\n", a)
// output: 00000000.28000000119209289550781
}
问题
浮动类型在表示 0.1 0.2 等小数时存在精度问题
0.1(10) = 0.00011001100…(2)
0.2(10) = 0.00110011001…(2)
如何精确的计算小数?
相关的 issue
decimal 包
一个解决浮点类型精确度问题的 Golang 包
通过 Go 定点算术运算来避免精度问题
什么是定点数
通过整数和缩放因子来表示小数
0.2 = 2 * 10^(-1)
结构体概述
type Decimal struct {
value *big.Int
exp int32
}
3.14 会被表示为: 314*10^(-2)
value: 314
exp: -2
exp 表示 10 的 -2 次方中的 -2
加法
0.2 + 0.34
初始状态: 2*10^(-1) + 34*10^(-2)
缩放差异: diff = abs((-1) - (-2)) = 1
缩放差异值: s = 10^(diff) = 10
统一缩放:
∵ -2 < -1
∴ 2*10^(-1) = 2*s*10^(-1-diff)
∴ 20*10^(-2) + 34*10^(-2)
∴ (20 + 34) * 10^(-2)
参考
演示工具