※ 引述《shan830609 (茶里王)》之铭言:
: 第二题的a
: 想请问一下像这种除不尽的数字
: 在用二进制表达时的数字要怎么转换
: 以前都是把小数列出来一个一个加到满足十进制的数
: 但这题mantissa有52个bits会加到死…
: 想请问有没有什么方法可以比较快速列出来的
: http://imgur.com/bIsiL7k
推 odanaga: 会有规律 类似无穷循环小数 03/03 17:23
来提供一点想法..
以这题来说
整数部分 5 = 4 + 1, 可以轻松得到答案
但是小数 0.03 不好算, 需要每次乘2来验证是否进位
事实上计算量来讲, 至少还是得计算出循环的部分才能确定答案
所以提供一个快速算出共几位循环的方法
本题来说, 此计算等价于
3 * 2^a (mod 100)
亦等价于
3 * 2^b (mod 25)
因为2与25互质, 所以 2 ^ ψ(25) = 1 (mod 25)
把2当成generator刚好是ψ(25)个元素, 也就是ψ(25) = 5 * (5-1) = 20个循环
所以这题至少要算20次(不包含位移量)才能直接得到答案
同理, 如果是 0.003, 那就是ψ(125) = 100个循环
所以认命算吧XD
但至少你可以用mod的方式写的比较简略一点 (mod 100)
remain bit
3 0 1
6 0 2
12 0 3
24 0 4
48 0 5
96 0 6
92 1 7
84 1 8
68 1 9
36 1 10
72 0 11
44 1 12
88 0 13
76 1 14
52 1 15
04 1 16
08 0 17
16 0 18
32 0 19
64 0 20
28 1 21
56 0 22
12 1 23
3到23循环了