[解決済み] FLT_MAX、FLT_MINはなぜ正負の無限大ではないのですか、また、その用途は何ですか?
質問
論理的に言えば、浮動小数点値の性質から、表現可能な最大値と最小値は
float
はそれぞれ正の無限大と負の無限大です。
では、なぜ
FLT_MAX
と
FLT_MIN
を設定しないのですか?これは"規格がそう呼んだだけ"であると理解しています。しかし、それなら
何
使用
かもしれない
FLT_MAX
または
FLT_MIN
の表現可能な数値範囲の中間に位置しているためです。
float
? 他の数値制限は、比較に関する保証を行うため、ある程度の実用性があります(例えば、"No INT can test greater than INT_MAX")。このような保証がない場合、これらの浮動小数点数の制限はどのように使用されるのでしょうか?
C++の動機となる例です。
#include <vector>
#include <limits>
template<typename T>
T find_min(const std::vector<T> &vec)
{
T result = std::numeric_limits<T>::max();
for (std::vector<T>::const_iterator p = vec.start() ; p != vec.end() ; ++p)
if (*p < result) result = *p;
return result;
}
このコードはTが整数型であれば問題なく動作しますが、浮動小数点型であれば動作しません。 これは迷惑な話だ。 (そうそう、標準ライブラリは
min_element
しかし、それは問題ではありません。 重要なのは
パターン
.)
解決方法は?
の目的は
FLT_MIN
/
MAX
は、表現可能な浮動小数点の最小値と最大値が何であるかを伝えるものです。
数値
があります。無限大は数ではなく、限界値です。
FLT_MAXとFLT_MINは、現在、floatの表現可能な数値範囲の中央に位置しているため、どのような用途があるのでしょうか。
にあるわけではありません。
ミドル
を表現可能な範囲とする。正のフロート値は存在しない
x
に追加することができます。
FLT_MAX
で、表現可能な数値が得られます。あなたは、+INFを取得します。これは、先に述べたように、数字ではありません。
このコードはTが整数型であれば問題なく動作しますが、浮動小数点型であれば動作しません。これは迷惑な話だ。(そうそう、標準ライブラリはmin_elementを提供しているが、それが重要なのではない。ポイントはパターンです)。
そして、どのようにうまくいかないのでしょうか?唯一うまくいかないのは、テーブルの中に のみ +INFです。そしてその場合でも、実際の 数 エラーコードではありません。いずれにせよ、これはより良い選択でしょう。
関連
-
[解決済み] テスト
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] C++のファンクターとその使い方とは?
-
[解決済み] マクロで無意味なdo-while文やif-else文を使っているのはなぜですか?
-
[解決済み] C++のヘッダーファイルで#ifndefと#defineが使われているのはなぜですか?
-
[解決済み】なぜこれらのコンストラクトはプリインクリメントとポストインクリメントを使用して未定義の動作をしているのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。