質問編集履歴
1
知恵袋での指摘を元に一部修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -26,14 +26,14 @@
|
|
26
26
|
template<typename T, enable_if_t<std::is_unsigned<T>::value, std::nullptr_t> = nullptr>
|
27
27
|
constexpr T a(T min, T max, T n){
|
28
28
|
return (n < min)
|
29
|
-
? a(min, max, n + (max - min + 1) * ((min - n)
|
29
|
+
? a(min, max, n + (max - min + 1) * ((min - n) / (max - min + 1) + 1))
|
30
30
|
: (n - min) % (max - min + 1) + min;
|
31
31
|
}
|
32
32
|
```
|
33
33
|
|
34
34
|
という関数を作成しました。
|
35
35
|
|
36
|
-
[http://melpon.org/wandbox/permlink/
|
36
|
+
[http://melpon.org/wandbox/permlink/X9bbE8Bch292u68D](http://melpon.org/wandbox/permlink/X9bbE8Bch292u68D)
|
37
37
|
|
38
38
|
ところが``T``がsignedな整数の時(つまり上の方の関数が呼ばれた時)、``MIN``と``MAX``が極端に離れていると(``INT_MIN``と``INT_MAX``とか)オーバーフローするように思います。
|
39
39
|
|