C#とC / C ++でのバイナリからフロートへの変換の違い

イドHレヴィ

C / C ++とC#で2進数を変換すると、丸めによって2つの異なる結果が得られます。たとえば1000010000010110110000010111111、C#で取得34.84448しますが34.844479取得するときに取得しますが、なぜこの小さな違いがあるのでしょうか。C#での変換:

float f = System.BitConverter.ToSingle(bytearray,0);
//bytearray is an array that contains our binary number

C ++の場合:

int a = 1108041919; //The number that is being represented
float f = *(float *)&a;
マックス・ラングホフ

同じ浮動小数点値を10進数で明確に表す方法はたくさんありますたとえば、正確な出力の後に任意の数のゼロを追加できます(2の各累乗は有限長の10進表現であるため、すべての浮動小数点数も同様であることに注意してください)。

「余分な桁の印刷をいつ停止できるか」の基準は、通常、「10進出力を再度フロートに解析した場合にまったく同じ値が返されるときに、余分な桁の印刷を停止できる」として選択されますつまり、floatの「ラウンドトリップ」を出力することが期待されます。

10進表現34.844479を解析する34.84448、両方とも浮動小数点値0x420b60bfまたはに変換されることがわかります01000010000010110110000010111111したがって、これらの文字列は両方とも同じ浮動小数点数を表します。(出典:https://www.h-schmidt.net/FloatConverter/IEEE754.htmlで自分で試してみてください

あなたの質問は、「異なるランタイムライブラリが同じフロートに対して異なる値を出力するのはなぜですか?」という答えになります。答えは、「数字の印刷をいつ停止するかはライブラリ次第です。停止する必要はありません。最低限で」。再度解析したときに同じフロートを取り戻すことができる限り、ライブラリはその役割を果たしました。

まったく同じ10進文字列を表示したい場合は、適切なフォーマットオプションを使用してそれを実現できます。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

C#プログラムでのバイナリから浮動小数点への変換について

分類Dev

Cでのバイト(バイナリ)からASCIIへの変換

分類Dev

cでのバイナリから文字への変換

分類Dev

Cでのバイナリファイルからテキストファイルへの変換

分類Dev

C#フロートからダブルへの変換

分類Dev

C#ファイルからバイナリ、文字列、バイナリへの変換中のデータの損失を修正する方法

分類Dev

VBからC#への変換(2バイトの追加)

分類Dev

解析プロファイルJSONjavaからc#への変換

分類Dev

C#でのバッファとストリームの違い

分類Dev

C#:フィールドから月と年の形式への変換

分類Dev

C ++からC#へのコード変換、参照型と値型の問題

分類Dev

CとC ++でのint値のcharポインタの違いへの変換

分類Dev

C#とPythonのフロート丸めの違い

分類Dev

C ++フロートから文字列への変換がstringstreamで失敗する

分類Dev

C#変換と同等のC ++

分類Dev

C#属性とC#静的フィールドの違いは何ですか?

分類Dev

C#でバイナリ値からダブルへの変換中にエラーが発生しました

分類Dev

C ++でのファイルストリームへの/からのバイナリバイト/ ints / longsの書き込み/読み取り

分類Dev

C ++の16進文字列からバイトへの変換

分類Dev

VBからC#への変換

分類Dev

PHPからC#への変換

分類Dev

C#からPythonへの変換

分類Dev

DelphiからC#への変換

分類Dev

C#からjavascriptへのUnicode変換

分類Dev

JavaおよびC#-長い変換の違いからバイト配列

分類Dev

C#でのIsNullOrEmptyとIsNullOrWhiteSpaceの違い

分類Dev

C#での[、]と[] []の違い

分類Dev

リンクリストの保存とバイナリファイルへのロード(C)

分類Dev

c#からのPython変換4/5バイトフレームからのCRC8の計算

Related 関連記事

  1. 1

    C#プログラムでのバイナリから浮動小数点への変換について

  2. 2

    Cでのバイト(バイナリ)からASCIIへの変換

  3. 3

    cでのバイナリから文字への変換

  4. 4

    Cでのバイナリファイルからテキストファイルへの変換

  5. 5

    C#フロートからダブルへの変換

  6. 6

    C#ファイルからバイナリ、文字列、バイナリへの変換中のデータの損失を修正する方法

  7. 7

    VBからC#への変換(2バイトの追加)

  8. 8

    解析プロファイルJSONjavaからc#への変換

  9. 9

    C#でのバッファとストリームの違い

  10. 10

    C#:フィールドから月と年の形式への変換

  11. 11

    C ++からC#へのコード変換、参照型と値型の問題

  12. 12

    CとC ++でのint値のcharポインタの違いへの変換

  13. 13

    C#とPythonのフロート丸めの違い

  14. 14

    C ++フロートから文字列への変換がstringstreamで失敗する

  15. 15

    C#変換と同等のC ++

  16. 16

    C#属性とC#静的フィールドの違いは何ですか?

  17. 17

    C#でバイナリ値からダブルへの変換中にエラーが発生しました

  18. 18

    C ++でのファイルストリームへの/からのバイナリバイト/ ints / longsの書き込み/読み取り

  19. 19

    C ++の16進文字列からバイトへの変換

  20. 20

    VBからC#への変換

  21. 21

    PHPからC#への変換

  22. 22

    C#からPythonへの変換

  23. 23

    DelphiからC#への変換

  24. 24

    C#からjavascriptへのUnicode変換

  25. 25

    JavaおよびC#-長い変換の違いからバイト配列

  26. 26

    C#でのIsNullOrEmptyとIsNullOrWhiteSpaceの違い

  27. 27

    C#での[、]と[] []の違い

  28. 28

    リンクリストの保存とバイナリファイルへのロード(C)

  29. 29

    c#からのPython変換4/5バイトフレームからのCRC8の計算

ホットタグ

アーカイブ