小数化分数 只考虑纯循环小数. 以循环节中的数字为分子, 相同位数的数字 9 为分母, 再约分就得到结果. 例如 `0. dot 3 = 3/9 = 1/3`, `quad 0. dot 0 dot 9 = 09/99 = 1/11`,
`0. dot 1 4285 dot 7 = 142857/999999 = 1/7`, `quad 0. dot 0 7692 dot 3 = 076923/999999 = 1/13`.

分数化小数 当然可以直接作除法. 也可以利用熟记的简单分数的值 (见下表) 做快速计算: `1/12 = 5/60 = 0.08 dot 3`, `quad 1/15 = 6/90 = 0.0 dot 6`, `quad 1/18 = 5/90 = 0.0 dot 5`. 此外, 由原根的知识知道, 1/17 的循环节有 16 位, 1/19 的循环节有 18 位, 等等. 100 以内满足 1/n 的循环节恰有 n-1 位的数字 n 有 7, 17, 19, 23, 29, 47, 59, 61, 97.

1/2 0.5 3/8 0.375 1/7 `0.dot 1 4285 dot 7` 5/7 `0.dot 7 1428 dot 5`
1/4 0.25 5/8 0.625 2/7 `0.dot 2 8571 dot 4` 6/7 `0.dot 8 5714 dot 2`
3/4 0.75 7/8 0.875 3/7 `0.dot 4 2857 dot 1` 1/9 `0. dot 1`
1/8 0.125 1/16 0.0625 4/7 `0.dot 5 7142 dot 8` 1/11 `0. dot 0 dot 9`

`f(x) = sum_(n ge 0) n * x^n` `= x "d"/dx sum_(n ge 0) x^n` `= x "d"/dx 1/(1-x)` `= x/(1-x)^2`, `f(10^-2) =10^-2/(1-10^-2)^2 = 100/99^2`. 于是 `100//99^2 = 0.010203040506070809...`

口算开平方 利用微分近似 `sqrt(1+x) ~ 1 + x/2` (`x to 0`) 来计算平方根. 如计算 `sqrt n`, 可先取一个接近 `n` 的完全平方数 `m^2`, 记 `x = n // m^2 - 1`, 则 `sqrt n = m sqrt (n / m^2)` `= m sqrt(1+x)` `~~ m (1 + x/2)` `= m + (n - m^2) / (2 m)`. 如, `sqrt(97) ~~ 10 - 3/(2 xx 10) = 9.85`,
`sqrt "e" ~~ sqrt(2.72) ~~ 1.6 + (0.16)/(2 xx 1.6) = 1.65`,
`sqrt pi ~~ sqrt(3.14) ~~ 1.8 - (0.1)/(2 xx 1.8) = 1.77 dot 2`.
可以用计算器验证上面各式的精度.

用 Padé 近似开方 `x` 充分小时, `(1+x)^(1/a) ~~ (2a+(a+1)x)/(2a+(a-1)x)`,
`sqrt(1+x) ~~ (4+3x)/(4+x)`,
`root 3 (1+x) ~~ (3+2x)/(3+x)`.
如 `root 3 2 ~~ (3+2)/(3+1) = 5/4`; 进一步改进为 `root 3 2 = 5/4 root 3 (128/125)` `~~ 5/4 (3+6/125)/(3+3/125)` `= 5/4 * 127/126` `~~ 1.25992`.

笔算开平方 求 `root 4 1.33`.

  1. 把求四次方根分解为开两次平方. 问题化为求 `|__ sqrt x __|`, 其中 `x = 13300`.
  2. 先设 `x = 10a_1 + b_1`, `0 le b_1 le 9`. 因为 `b_1^2 lt 100`, 有 `a_1 = |__ sqrt 133 __|`. 又设 `a_1 = 10a_2 + b_2`, `0 le b_2 le 9`. 同理 `a_2 = |__ sqrt 1 __| = 1`.
  3. `(10a_2 + b_2)^2 le 133` `rArr (20a_2 + b_2)b_2 le 33` `rArr b_2 le 1`, `b_2` 应当尽可能取大, 所以 `b_2 = 1`, `a_1 = 11`. 同理 `(10a_1 + b_1)^2 le 13300` `rArr (20a_1 + b_1)b_1 le 1200` `rArr b_1 le 5`.
# 笔算开平方的竖式表示    # 同理
     1  1  5                 1  0  7  2
    --------                -----------
 1 / 1 33 00             1 / 1 15 00 00
     1                       1
      ---                     ---
  21 / 33                 20 / 15
       21                       0
      ------                  -------
 225 / 12 00             207 / 15 00
       11 25                   14 49
                                 ------
                           2142 / 51 00
                                  42 84
# 每步把当前答案的 20 倍加上一位数字, 再与这位数字相乘,
# 要求不超过当前余数, 如此做下去.

对数的估算 首先记住 `ln 2 ~~ 0.693`, `ln 3 ~~ 1.099` 等, 然后利用 Padé 近似 `ln(1+1/x) ~~ 2/(2x+1)` (`x` 充分大). 例如 `ln 5 = ln 4 + ln(1+1/4)` `~~ 2 ln 2 + 2/(2*4+1)` `~~ 1.608`,
`ln 103 = ln 128 - ln(1+25/103)` `~~ 7 ln 2 - 2/(2*103//25 + 1)` `~~ 4.635`.
计算器: log(5) = 1.609438, log(103) = 4.634729.

    进制转换 将十进制数分别转换为二进制和十六进制; 将二进制数和十六进制数化为十进制.
  1. 十进制数化为二进制: 以 2500 为例, 反复把 2500 除以 2, 将余数写在右边, 商写在下面.
    2500 0
    1250 0
     625 1
     312 0
     156 0
      78 0
      39 1
      19 1
       9 1
       4 0
       2 0
       1 1
    
    从下到上读出各个余数, 即为二进制数: 1001 1100 0100
  2. 十进制数化为十六进制, 也可以采用反复除以 16, 再倒序读出余数的做法, 但一般是先化为二进制数, 再从低位起按每 4 位一组划分, 利用二进制与十六进制对照表进行转换, 得到答案 0x9c4. 十六进制与二进制之间的转换是容易的, 在实际应用中, 十六进制常作为二进制的缩写而存在.
  3. 将二进制数 `b_n b_(n-1) cdots b_1 b_0` 化为十进制, 只需计算 `sum_(i=0)^n b_i 2^i` 即可. 为此可以熟记常见的 2 的正整数幂的十进制写法.
  4. 将十六进制数 `h_n h_(n-1) cdots h_1 h_0` 化为十进制, 可以直接计算 `sum_(i=0)^n h_i 16^i`, 也可以先化为二进制数, 再按 3. 的方法化为十进制.
二进制与十六进制对照表
0000 0x0 0100 0x4 1000 0x8 1100 0xc
0001 0x1 0101 0x5 1001 0x9 1101 0xd
0010 0x2 0110 0x6 1010 0xa 1110 0xe
0011 0x3 0111 0x7 1011 0xb 1111 0xf
2 的正整数幂
`2^1` 2 `2^6` 64 `2^16` 65536
`2^2` 4 `2^7` 128 `2^20` 1048576
`2^3` 8 `2^8` 256 `2^24` 16777216
`2^4` 16 `2^9` 512 `2^30` 1073741824
`2^5` 32 `2^10` 1024 `2^32` 4294967296