--- title: 複合方式計算小數 tags: math, number theory --- # 分離式儲存小數 為了處理Attribute只能計算 `[-1024.0, 1024.0]` 的值域限制問題, 我們可以把一個小數拆分成整數(int)與小數(frac)的部分, 相比於Scoreboard的作法,不需要去考慮小數的指數部分, 可以將其拆成如下的方式來看:  > 1. <font color=red>frac-part</font> 也可以儲存≥1.0的值 > 2. <font color=blue>int-part</font> 同樣也存成 double 的好處有很多 > (1) 套入attribute時不需要再考量轉換精準度的問題 > (2) 可以直接把int-part轉換入scoreboard進行計算 > (3) 可以把int-part和frac-part存入同一個陣列中,或是存成一個2維向量 --- ## 要如何將其分離成整數與小數兩部分? 我們可以將數值放到 Pos 中去處理,可看成是處理座標上的值轉換問題, --- ## 分離之後要怎麼進行計算? 概念其實很簡單,同樣都是塞到Attribute的公式去計算結果就行了 $\text{result} = (\text{Base}+\Sigma A)\cdot(1+\Sigma N)\cdot\Pi(1+M_i)$ * ### 加法運算(Addition Operation) $\text{Base} = 0$ $\Sigma A =A_\text{int}+A_\text{frac}+B_\text{int}+B_\text{frac}$ $\text{result} = (0+A_\text{int}+A_\text{frac}+B_\text{int}+B_\text{frac})$ * ### 減法運算(Addition Operation) $\text{Base} = 0$ $\Sigma A =A_\text{int}+A_\text{frac}-B_\text{int}-B_\text{frac}$ $\text{result} = (0+A_\text{int}+A_\text{frac}-B_\text{int}-B_\text{frac})$ * ### 乘法運算(Multiplication Operation) $\text{Base} = 0$ $\Sigma A = A_\text{int}+A_\text{frac}$ $\Sigma N=B_\text{int}+B_\text{frac}-1$ $\text{result} = (0+A_\text{int}+A_\text{frac})\cdot(1+B_\text{int}+B_\text{frac}-1)$ 但我個人很推薦將其改成使用二維向量的方式來儲存和計算, 在設計上就可以省去很多需要額外考量的點,也會比較方便處理 --- ## 使用這種方式的優缺點 ### pros 相比於只使用Attribute來計算,可以得到更大的數值空間,同時兼具一定程度的小數精準度 ### cons
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up