y = f(x) = x^5
となるような写像 f を作ろうとして次のようなコードを書いてハマった。
unsigned long long N[1000];
for (int i = 0; i < 1000; i++) {
N[i] = i*i*i*i*i;
}
N
は unsigned long long
と定義しているが、 i^5
の i
を int
としてしまっている。当然、右辺の計算結果をまず用意した上で左辺に代入するわけだから、これでは代入する前にオーバーフローしてしまう。
というわけで、イテレータにも配列と同じ型を宣言して、なんとかこれを解消する。
unsigned long long N[1000];
- for (int i = 0; i < 1000; i++) {
+ for (unsigned long long i = 0; i < 1000; i++) {
N[i] = i*i*i*i*i;
}
理屈は納得できるし、実際こう書いて正しい結果を出せる。しかし感覚的にはいまいちピンとこない感じがする。そもそも整数型の使い分け自体をずいぶん適当なさじ加減でやってしまっているので、まずはそこから矯正しないといけないのかもしれない。