5

コードをステップ実行してVSC++でソフトウェアをデバッグすると、一部のfloat計算が末尾にドットが付いた数値として表示されることに気付きます。

1232432.

この結果につながる1つの操作は、次のとおりです。

float result = pow(10, a * 0.1f) / b

ここで、aは-50から-100前後の大きな負の数であり、bはほとんどの場合1前後です。浮動小数点に関しては、精度の問題に関するいくつかの記事を読みました。私の質問は、末尾のドットがVisual-Studioであるかどうかです。これは、この数値、つまり変数の結果の精度が非常に低いことを示す方法です。そうでない場合、それはどういう意味ですか?

これは今日仕事で出てきました、そして私はより大きな数のために問題があったことを覚えています、それでこれは毎回起こりました(そして「これ」によって私はその末尾のドットを意味します)。しかし、数字が7桁のときに起こったことを覚えています。ここで彼らは、フロートの精度が7桁であることを示しています。

C++フロート除算と精度

これは問題であり、Visual Studioは最後にドットを付けることでこれを教えてくれますか?

私はそれを見つけたと思います!「仮数は数字のシーケンスとそれに続くピリオドとして指定されます」と書かれています。仮数はどういう意味ですか?これは、PCとDSPでコードを実行する場合で異なる可能性がありますか?なぜなら、私は異なる結果を得るということであり、私にとって奇妙に見えるのはこの期間だけです。それが何を意味するのかわからないからです。

http://msdn.microsoft.com/en-us/library/tfh6f0w2(v=vs.71).aspx

4

3 に答える 3

4

「4.0」が4±0.1を意味し、「4.00」が4±0.01を意味する「有効数字」の規則を参照している場合、いいえ、floatまたはにそのような概念はありませんdouble。数値は、実際に「有意」であるかどうかに関係なく、常に24または53の有効ビット(7.22または15.95の10進数)で格納されます。

末尾のドットは、その後に数字がない小数点です(これは有効なCリテラルです)。それはどちらかを意味します

  • 値は1232432.0であり、不要な後続ゼロをトリミングしました。または
  • すべてが有効数字7桁に丸められます(この場合、真の値は1232431.5、1232431.625、1232431.75、1232431.875、1232432.125、1232432.25、1232432.375、または1232432.5の場合もあります)。

本当の問題は、なぜ使用しているのfloatか ということです。doubleC(++)の「通常の」浮動小数点型でありfloat、メモリ節約の最適化です。

*衒学者は、非正規化数、x8780ビット中間値などをすばやく指摘します。

于 2011-12-16T00:33:26.687 に答える
3

精度は可変ではありません。つまり、VSが表示用にフォーマットする方法です。精度(または欠如)は、特定の浮動小数点数に対して常に一定です。

于 2011-12-15T21:36:09.263 に答える
1

リンクしたMSDNページでは、ソースコード内の浮動小数点リテラルの構文について説明しています。使用しているツールによって番号がどのように表示されるかは定義されていません。printfまたはを使用して浮動小数点数を印刷する場合std:cout << ...、言語標準はそれがどのように印刷されるかを指定します。

デバッガーで印刷すると(これはあなたが行っていることのようです)、デバッガーの開発者が決定した方法でフォーマットされます。

特定の浮動小数点数を表示するには、さまざまな方法があります。1.0、、、、およびすべてがまったく同じことを意味します。末尾は通常、精度について何も教えてくれません。私の推測では、デバッガーの開発者は、スペースを節約するためではなく、使用しただけだと思います。1.10.0E-001.1e+1.1232432.1232432.0

一部の値の末尾.が表示され、他の値がまったく表示されない10進数が表示.される場合は、デバッガーの奇妙なグリッチ(おそらくバグ)のように聞こえます。

実際の精度がわからない場合は、IEEE 32ビット(最近のほとんどのコンピューターで使用されている形式)の場合、float前後の次の表現可能な数値はと1232432.0です。(よりもを使用すると、はるかに高い精度が得られます。)1232431.8751232432.125doublefloat

于 2011-12-15T23:15:52.280 に答える