contributed by < chi-ming5566
>
測驗一
bfloat16 浮點數格式由 Google 公司發展,最初用於該公司第三代 Tensor 處理單元 (Cloud TPU)。bfloat16 的主要想法是提供 16 位元浮點數格式,其動態範圍與標準 IEEE 754 的 FP32 (Single-precision floating-point format) 相同,但精度較低,相當於指數區和 FP32 保持相同的 8 位元,並將 FP32 的 fraction 區域縮減到 7 位元。
以下為測試程式
y = x + r
可以推測出,r 是一個維持精度的補償值,且 bfloat 的 fraction 只有 7 個 bits,所以我們只需要把 fraction 的第 8 個 bits 加回來即可。BB1 = 0xff800000
,另外 float 的r /= 256;
是 exponent 減 8 的結果,而不是向右 shift 8 個 bits。*py
,因此BB2 = 0xffff0000
。測驗二
其測試程式如下:
do while(0)
根據 do/while(0) vs scope block 的解釋,使用這個寫法可以避免 dangling else 的出現。
解釋 ring buffer 運作模式
ringbuf_write
ringbuf_write_peek
,將 ELEMENT
放進 end
的位置。ringbuf_write_skip
,將 end
指向下一個位置。當 start == end
時,會將 start
指向下一個位置。ringbuf_read
ringbuf_read_peek
,將 start
指向的 ELEMENT
讀出來。ringbuf_read_skip
,將 start
指向下一個位置。NEXT_START_INDEX
或 NEXT_END_INDEX
時,都是為了把指針指向下一個位置,所以都需要做 +1 。測驗三
執行結果為:
node
要放到最前面,所以直接將 node->next
接上 *head
,接著要對 *head
進行更新,所以 assign node
給 *head
。測驗四
LeetCode 287. Find the Duplicate Number 給定一個整數序列,其中會有一個數值重複,請找出。
已知條件:
log_2
是用來判別該數列的最大數值轉換成 2 進位共有幾個 bits ,因為後面會從右至左逐一 bit 來檢查。res
,因此CCC
為c1 < c2
。