teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

質問のコードの見間違えを追記

2021/07/08 06:46

投稿

nobkz
nobkz

スコア320

answer CHANGED
@@ -1,3 +1,6 @@
1
+ (ふと見直したら適切なサイズになっていました。私の質問のコードの見間違えでした.... )
2
+
3
+
1
4
  排他制御についてみんな書かれているので、そもそもなんですが、int型のサイズを越えた計算になっていないか確認した方がいいですね。
2
5
 
3
6
  intは型c言語だと大抵の場合(処理系依存ですが)、2byteとか4byteだと思います。とりあえず4byteとして、符号付きなので、 -2^31 ~ (2^31-1) [2^nは2のn乗とする]の範囲になります。この正の数の最大値を計算すると、わかりやすいように3桁でコンマを入れて記述します。

2

依存性追記

2021/07/08 06:46

投稿

nobkz
nobkz

スコア320

answer CHANGED
@@ -13,4 +13,4 @@
13
13
 
14
14
  となります。もし4byteのサイズであれば、なのでどこかでint型のサイズが溢れます。
15
15
 
16
- なので、範囲は負数を使わないので、```unsinged long```あたりを使うべきでしょう。
16
+ なので、範囲は負数を使わないので、(おそらくですが)```unsinged long```あたりを使うべきでしょう。(あくまでサイズは処理系依存なので、適切サイズになるようにしてくださいね)

1

処理系依存性を追記

2021/07/08 06:19

投稿

nobkz
nobkz

スコア320

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  排他制御についてみんな書かれているので、そもそもなんですが、int型のサイズを越えた計算になっていないか確認した方がいいですね。
2
2
 
3
- intは型c言語だと大抵の場合、4byteだと思うので、符号付きなので、 -2^31 ~ (2^31-1) [2^nは2のn乗とする]の範囲になります。この正の数の最大値を計算すると、わかりやすいように3桁でコンマを入れて記述します。
3
+ intは型c言語だと大抵の場合(処理系依存ですが)2byteとか4byteだと思います。とりあえず4byteとして、符号付きなので、 -2^31 ~ (2^31-1) [2^nは2のn乗とする]の範囲になります。この正の数の最大値を計算すると、わかりやすいように3桁でコンマを入れて記述します。
4
4
 
5
5
  2^32 -1
6
6
  = 2,147,483,647
@@ -11,6 +11,6 @@
11
11
  sum(100000) = 100000/2 * (100000 - 1)
12
12
  = 4,999,950,000
13
13
 
14
- となります。なのでどこかでint型のサイズが溢れます。
14
+ となります。もし4byteのサイズであれば、なのでどこかでint型のサイズが溢れます。
15
15
 
16
16
  なので、範囲は負数を使わないので、```unsinged long```あたりを使うべきでしょう。