iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
少数fがk-1桁の10進形で、以下のような配列dで表されているとする。
f=Si : 1<=i
fを2で割りたいとする。これは、iを1からk-1この数字diに対して割り算を繰り返すことで行える。以下のように、ひとつ前の桁からの桁下がりの可能性や、次の桁への余りrの保持を考慮して、各桁の数字を2で割っていけばいい。
r=10*r+d[i]; d[i]=rDIV2; r=rMOD2
これをSwiftでコード化すると以下のようになる。Swiftでは配列の添字は0始めなので、添字の扱いを少々変更している。
import Foundation
let N = 10
var d = [Int](repeating: 0, count: N)
for k in 0..<N {
print(".", terminator: "")
var r: Int = 0
for i in 0..<k {
r = 10 * r + d[i] // 前の桁の余りr
d[i] = r / 2 // 角桁の数字を2で割っている
r = r % 2 // 余りr
print("\(d[i])", terminator: "")
}
d[k] = 5
print("5")
}
結果は以下のとおり。
.5
.25
.125
.0625
.03125
.015625
.0078125
.00390625
.001953125
.0009765625