数値型の最小値を得る方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
usao
記事: 1892
登録日時: 13年前
連絡を取る:

数値型の最小値を得る方法

#1

投稿記事 by usao » 12年前

●知りたいこと
C++で数値型
(組み込み型というのかな? {unsigned char, char, ..., int, ..., float, double} )
の取り得る最小値を得る定石的な方法.

●現状
std::numeric_limits<>::min() の返す値の意味が整数型と浮動小数点数型とで異なっているために,
数値の型をテンプレートとした関数の中などで,その型の最小値が欲しい場合に,

コード:

template< class T >
inline T GetMinVal(){	return (std::numeric_limits<T>::min)();	}

template<>
inline float GetMinVal<float>(){	return -(std::numeric_limits<float>::max)();	}

template<>
inline double GetMinVal<double>(){	return -(std::numeric_limits<double>::max)();	}
のようなものを用意せねばならず面倒なのですが…

もっと良い{簡単な? 短い? 一般的な?}方法があれば教えていただきたくお願い申し上げます.

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 数値型の最小値を得る方法

#2

投稿記事 by h2so5 » 12年前

C++11なら std::numeric_limits<>::lowest() があります。

アバター
usao
記事: 1892
登録日時: 13年前
連絡を取る:

Re: 数値型の最小値を得る方法

#3

投稿記事 by usao » 12年前

そんなものがあったのですね.
ありがとうございました.

ちなみに「C++11はダメ」とか言われた場合には,
私が↑で書いたようにやるしかないのでしょうか.

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 数値型の最小値を得る方法

#4

投稿記事 by h2so5 » 12年前

スマートな代替手段がないからC++11で追加されたとも考えられます。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 数値型の最小値を得る方法

#5

投稿記事 by h2so5 » 12年前

このコードならC++03でも動くと思います。

コード:

template< class T >
inline T lowest(){ 
	return std::numeric_limits<T>::is_integer ? std::numeric_limits<T>::min() : -std::numeric_limits<T>::max(); 
}

アバター
usao
記事: 1892
登録日時: 13年前
連絡を取る:

Re: 数値型の最小値を得る方法

#6

投稿記事 by usao » 12年前

なるほど! この方法はシンプルで良いですね.
ありがとうございました.

閉鎖

“C言語何でも質問掲示板” へ戻る