maisumakunさんの回答とコメントですでに理解されたかもしれませんが、コードを書き換えてわかりやすくしてみます。
とりあえず床関数で書き直します。単に書き換えるとtotal / num_splits
が2回出てくるので、変数N
としておきます。
python
1import math
2
3total = 100
4num_splits = 7
5N = total / num_splits
6
7chunks = []
8for i in range(num_splits):
9 n = math.floor((i + 1) * N) -\
10 math.floor(i * N)
11 chunks.append(n)
12
13print(chunks, sum(chunks))
14
後ろの床関数を通った結果は整数なので、まるごと前の床関数の中に入れます(わかりやすいように)。ついでに元々あった(i + 1) * N
を展開。
python
1import math
2
3total = 100
4num_splits = 7
5N = total / num_splits
6
7chunks = []
8for i in range(num_splits):
9 n = math.floor(i * N + N - math.floor(i * N))
10 chunks.append(n)
11
12print(chunks, sum(chunks))
13
i * N - math.floor(i * N)
はi * N
の小数部なので、そのへんを加味して整理できます。
python
1import math
2
3total = 100
4num_splits = 7
5N = total / num_splits
6
7chunks = []
8for i in range(num_splits):
9 iN = i * N
10 iN_frac = iN - math.floor(iN)
11 n = math.floor(N + iN_frac)
12 chunks.append(n)
13
14print(chunks, sum(chunks))
15
N + iN_frac
について考えると、N
は実数として均等に分けた場合の数字(定数)、iN_frac
は純小数ですから、常にだいたい等しいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/10 11:59
2019/07/10 12:13
2019/07/10 15:53