浮点避坑

浮点数相加

我们知道浮点数尽量避免不同量纲的数相加

1
2
> 1023 + 0.00000000000001
Double = 1023.0

浮点数除法

不同量纲之间的除法也会得到不一样的结果

1
2
3
4
> 1.023/2.047
Double = 0.49975574010747426
> 1023.0/2047.0
Double = 0.49975574010747437

因此对于有些应用可能引入意向不到的结果
比如

1
2
3
4
> 1023.0/2047.0*2.047 == 1.023
Boolean = false
> 1023.0/2047.0*2047 == 1023
Boolean = true

警示!

避免不同量纲的数做加减法,还要注意不同量纲的数做乘除法带来的意外结果

slides(revealjs 导出PDF)

1. export HTML to slides

$: unzip reveal.js.master.zip
$: cd reveal.js.master

2. Edit index.html

Export to reveal.js from https://slides.com/yourname/yourslide/edit
Presentation made with Slides are powered by the reveal.js open source presentation framework. This export lets you migrate your slide content to a fresh reveal.js install.
a. Download a copy of the reveal.js framework and make the following edits to its index.html.
b. In the , replace the theme CSS with:
c. In the , replace the

node with:
d. In the Reveal.initialize call towards the bottom of your index.html, append these config values:

3. Edit index pdf config

a. edit index.html
add. Reveal.Configure before Reveal.initialize

1
2
3
Reveal.configure({ pdfSeparateFragments: false,
pdfMaxPagesPerSlide: 1 });
Reveal.initialize({ ...

4. Export pdf

open index.html by Chrome like http://xxxx.index.html?print-pdf
Ctrl-P(windows) or COMMAND-P(Mac-OS)
Save

FAQ

  1. Save Fail(Preview Failure)
    print range - full
    I found Chrome export pdf raise Error when pages number bigger than 56
    So you should export it twice 1-56, 57~64

IPC进程通信、消息队列

计算机进程通信原理、IPC、消息队列,

常见的方法

  • 共享内存模式
  • 消息传递模式
  • 共享文件模式

主要使用的是前两种方法

多处理器之间通信

处理器之间不能通过消息传递模式通信,只能共享内存
处理器本身是异步执行的,消息队列没办法实现(接受消息和消耗消息有可能会冲突)
而共享内存的方法也有可能会导致冲突,可以为不同处理器划分不同地址空间来避免冲突

01

单处理器进程通信

进程之间的通信最常见最安全的方法就是消息队列。
每个进程会维护一个消息队列(常见的是FIFO队列,也有带优先级的队列本文不做讨论)

02

进程A给进程B发消息,首先获取进程B消息队列(链表)的地址,将消息插入到链表后面。
当进程B执行是会去取消息队列最前面的消息然后执行。
由于进程A进程B是在同一处理器上占不同的时间片(跟操作系统进程的调度算法有关),
同一时刻消息队列不可能即recive 又 consume,所以不存在队列读写冲突的问题。

消息可以是简单的数据编码标志,也可以携带数据(数据起始地址以及长度),或者其他数据结构体格式

03

scala 的Actor的消息传递也是用此方式实现。

综合时序分析回顾

关于计算机大小端

一般计算机所讲的大小端指的是字节序的大小端,比特序一般默认都是小端无论字节序为大端还是小端

字节序大小端

HSB(大端格式):
按字节从大到小排布

1
2
3
byte0,byte1,byte2,byte3
byte4,byte5,byte6,byte7
...

LSB(小端格式):
按字节从小到大排布

1
2
3
byte3,byte2,byte1,byte0
byte7,byte6,byte5,byte4
...

比特序大小端

bit大端 =[01234567]
bit小端 =[76543210]
一般常见的都是bit小端