這是一顆隨著時間呈指數級越來越憤怒的球體。
原文由 Marcin Wichary 于 發布,訂閱此部落格
學電腦科學時,遲早都會遇到浮點數,以及它那奇特而燦爛的完整面貌。浮點數讓你能儲存極大或極小的數值,但代價有點奇怪。數字本身其實仍是一個精度有限的普通數字,只是旁邊多了一個浮點——另一個負責告訴你要補幾個零在前面或後面的數字。
實際上的效果是,當你的數字來到百萬等級,精度就只剩千位數;到了十億等級,就只能以百萬為單位來計數,以此類推。這其實很符合直覺,就像億萬富翁根本不在乎口袋裡的零錢。(到浮點數視覺化工具看看,你會發現輸入 9000004、9000005 和 9000006 都沒問題,但只要再多加一個零,90000004 就會被捨入成 90000000,而 90000005 則會被進位成 90000008。數字越大,精度就越差。)
這在電玩或繪圖軟體中會產生一種奇怪的效應:你把某個東西搬得離宇宙原點——也就是 X 與 Y 為 0 的地方——越遠,就越得擔心它內部的精度問題。
這在現實世界中不是問題。你可以把一顆極小、極其精密的手錶螺絲送到太陽系外再送回來,它依然完好無缺。但換到數位世界,假設地球就是 0:0——向哥白尼致歉——你離得越遠,浮點就越往左移,終究另一邊數字的精度會耗盡;一個能表示數十億公里的數值,已經粗糙到連毫米都無法顧及。
這是個非常迷人的問題,在這支短片中得到了很漂亮的視覺化呈現。以下就是當你把一個內部精度固定的物體越搬越遠時會發生的事:

要繞過這個問題是有辦法的——你可以提高精度、引入「浮動偏移(floating offset)」、圍繞兩個浮點設置兩個精度中心,或是做一堆其他事情——但每一種都會讓你付出代價。所以,有時候最好的解法就是最簡單的那個:別讓數字變得太大。
這也是為什麼 Adobe Illustrator、Figma,還有我敢打賭至少其他幾款標榜無限畫布的工具,實際上會在你偏離中心太遠時把你擋下來。畫布彷彿在說,精度就像大氣層,越往外就越稀薄。我們無法保證你的結構完整性在超過某個臨界點後還能維持,所以我們乾脆不讓你過去。
這是 Figma 的情況,在某個時刻,畫布就不再跟隨你的捲動指令了:
第一個看不見的 X 值是 131,072,而它正是這類數字之一,會讓人感到非常、非常眼熟,這一點也不意外。
看起來是個相當大的數字,但如果你考慮到簡報中的一張投影片就是 1920×1080,就會發現它並沒有一開始想的那麼無限。這也是——某種程度上——為什麼 Figma Slides 會在 20 張投影片後手動幫你換行的原因:
隨機一篇部落格
留言
登入後參與討論