ページ 11

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

Posted: 2013年11月06日(水) 10:49
by usao
●知りたいこと
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)();	}
のようなものを用意せねばならず面倒なのですが…

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

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

Posted: 2013年11月06日(水) 11:33
by h2so5
C++11なら std::numeric_limits<>::lowest() があります。

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

Posted: 2013年11月06日(水) 15:50
by usao
そんなものがあったのですね.
ありがとうございました.

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

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

Posted: 2013年11月06日(水) 18:13
by h2so5
スマートな代替手段がないからC++11で追加されたとも考えられます。

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

Posted: 2013年11月06日(水) 23:04
by h2so5
このコードなら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(); 
}

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

Posted: 2013年11月07日(木) 09:56
by usao
なるほど! この方法はシンプルで良いですね.
ありがとうございました.