浮動小数点数の正確な表現をループする方法は?

alisianoi

ある浮動小数点数から次の浮動小数点数に正確にループしようとしています。言ってやるが、私はからループする必要があるstd::numeric_limits<float>::epsilon()1の両方正確に表現IEEE754の数字です。私のコードは:

 using nld = std::numeric_limits<float>;
 auto h = nld::epsilon();
 for (; h < 1; h = std::nextafter(h, 1)) {
     std::cerr << "h: " << h << std::endl;
 }

hは正確に表現可能であるため、どのループが無期限にループするので、それnextafterを返し続けます。また、ループ内のhにマシンイプシロンを追加してもカットされないことも知っています。浮動小数点数は等間隔ではありません。IEEE754番号の正確な表現をループするにはどうすればよいですか?

not equally spacedここでの問題は、それ自身を示します:

 using nld = std::numeric_limits<float>;
 auto h = nld::epsilon();
 for (; h < 4; h += nld::epsilon()) {
     if (h = h + nld::epsilon()) {
         std::cerr << "h: " << h << std::endl;
     }
 }

2私のために印刷続けます

user743382

コメントによると:

のアプローチnextafterはまさにあなたがすべきことです。ただし、予期しない結果につながる可能性のあるいくつかの問題があります。

cppreferenceの引用std::nextafter

float nextafter( float from, float to );(1)(C ++ 11以降)
double nextafter( double from, double to );(2)(C ++ 11以降)
long double nextafter( long double from, long double to );(3)(C ++ 11以降)
Promoted nextafter( Arithmetic from, Arithmetic to );(4)(C ++ 11以降)

..。

4)(1-3)でカバーされていない算術型の引数のすべての組み合わせに対するオーバーロードのセットまたは関数テンプレート。いずれかの引数が整数型の場合、それはにキャストされdoubleます。引数がの場合long double、戻り値の型Promotedもですlong double。それ以外の場合、戻り値の型は常にdoubleです。

あなた以来toIS 1、タイプのint、あなたはの戻り値の型と、過負荷バージョン4を取得しますdoubleさて、フロートを与えていることは完全に可能だf(float)nextafter((double)f, 1)まさにオリジナルと同じであるf:それはかなり可能性が高いタイプの次の表現可能数がいることだdoubleでは表現できないfloat、との変換バックすることをfloatラウンドダウン。

返される唯一のオーバーロードfloatは、toタイプがのオーバーロードですfloatそのオーバーロードを使用する1.0fには、の代わりにを使用し1ます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

浮動小数点数を抽出するPerl正規表現

分類Dev

正規表現で有効な小数点数を確認する方法は?

分類Dev

「小数点以下2桁の浮動小数点数で、0.25の増分のみを許可する」の正規表現は何ですか。

分類Dev

整数または小数点以下2桁の浮動小数点数を検証するための正規表現

分類Dev

負のnull浮動小数点正規表現を実装する方法

分類Dev

正確な値を浮動小数点数に加算および減算する

分類Dev

bashのループ内の浮動小数点数を減算する

分類Dev

角括弧または丸括弧内の浮動小数点数を見つけるための正規表現

分類Dev

正規表現を使用して文字列内の浮動小数点数を抽出する

分類Dev

PROLOG-浮動小数点数の小数を丸める方法は?

分類Dev

正規表現のテキスト行で数値と倍精度浮動小数点数を検索する

分類Dev

浮動小数点数の正確な正規表現が機能していません

分類Dev

1つの浮動小数点数に小数を掛けて浮動小数点数を取得する方法

分類Dev

文字列エンコードされた浮動小数点数の配列を浮動小数点数の配列に非整列化する方法は?

分類Dev

Gsonが整数を浮動小数点数として表現しないようにする方法

分類Dev

4.5以下の浮動小数点数の正規表現

分類Dev

浮動小数点数の正規表現

分類Dev

固定長浮動小数点数の正規表現

分類Dev

golangで空の浮動小数点数または整数値を確認する

分類Dev

JavaScriptで小数点付きの浮動小数点数を使用する最良の方法は何ですか?

分類Dev

浮動小数点数からEを削除する方法は?

分類Dev

2つの浮動小数点数の平均を取得する方法

分類Dev

「浮動小数点数の文字列」を全体と小数部分に分割する最も安全な方法は何ですか

分類Dev

末尾の0を含めて、浮動小数点数を小数点以下n桁に出力する方法は?

分類Dev

末尾の0を含めて、浮動小数点数を小数点以下n桁に出力する方法は?

分類Dev

正確な浮動小数点値を受け入れる方法

分類Dev

一連の非浮動小数点数が文字列にないかどうかを確認する方法

分類Dev

小数点以下0桁の浮動小数点数をデータベースに格納する方法

分類Dev

シェルスクリプトの浮動小数点数と比較する方法

Related 関連記事

  1. 1

    浮動小数点数を抽出するPerl正規表現

  2. 2

    正規表現で有効な小数点数を確認する方法は?

  3. 3

    「小数点以下2桁の浮動小数点数で、0.25の増分のみを許可する」の正規表現は何ですか。

  4. 4

    整数または小数点以下2桁の浮動小数点数を検証するための正規表現

  5. 5

    負のnull浮動小数点正規表現を実装する方法

  6. 6

    正確な値を浮動小数点数に加算および減算する

  7. 7

    bashのループ内の浮動小数点数を減算する

  8. 8

    角括弧または丸括弧内の浮動小数点数を見つけるための正規表現

  9. 9

    正規表現を使用して文字列内の浮動小数点数を抽出する

  10. 10

    PROLOG-浮動小数点数の小数を丸める方法は?

  11. 11

    正規表現のテキスト行で数値と倍精度浮動小数点数を検索する

  12. 12

    浮動小数点数の正確な正規表現が機能していません

  13. 13

    1つの浮動小数点数に小数を掛けて浮動小数点数を取得する方法

  14. 14

    文字列エンコードされた浮動小数点数の配列を浮動小数点数の配列に非整列化する方法は?

  15. 15

    Gsonが整数を浮動小数点数として表現しないようにする方法

  16. 16

    4.5以下の浮動小数点数の正規表現

  17. 17

    浮動小数点数の正規表現

  18. 18

    固定長浮動小数点数の正規表現

  19. 19

    golangで空の浮動小数点数または整数値を確認する

  20. 20

    JavaScriptで小数点付きの浮動小数点数を使用する最良の方法は何ですか?

  21. 21

    浮動小数点数からEを削除する方法は?

  22. 22

    2つの浮動小数点数の平均を取得する方法

  23. 23

    「浮動小数点数の文字列」を全体と小数部分に分割する最も安全な方法は何ですか

  24. 24

    末尾の0を含めて、浮動小数点数を小数点以下n桁に出力する方法は?

  25. 25

    末尾の0を含めて、浮動小数点数を小数点以下n桁に出力する方法は?

  26. 26

    正確な浮動小数点値を受け入れる方法

  27. 27

    一連の非浮動小数点数が文字列にないかどうかを確認する方法

  28. 28

    小数点以下0桁の浮動小数点数をデータベースに格納する方法

  29. 29

    シェルスクリプトの浮動小数点数と比較する方法

ホットタグ

アーカイブ