0

2 つ以上のプログラミング言語を使用して、浮動小数点数を持つプログラムを実装しようとしています。プログラムは、最終的にエラーを非常に小さな値にするために 50k の反復を示しています。

結果が同等であることを確認するために、異なる言語で同じ精度のデータ型を使用していることを確認したかったのです。C/C++のfloat/doubleとDやGoのfloat/doubleの対応があれば教えてください。この点で C/C++ と D はかなり近いと思いますが、確かではありません。どうもありがとう。

4

2 に答える 2

2

一般に、コンパイル済み言語の場合、浮動小数点の形式と精度は次の 2 つに分類されます。

  1. ハードウェアで直接サポートされていない浮動小数点関数を実装するために使用されるライブラリ。
  2. システムが実行されているハードウェア。

また、指定するコンパイラ オプション (およびコンパイラが一般的にどれほど洗練されているか) にも依存する場合があります。最近の多くのプロセッサにはベクトル命令があり、「通常の」浮動小数点命令を使用した場合とは結果が微妙に異なる場合があります (たとえば、FPU とx86 プロセッサー上の SSE)。x86 FPU の内部計算は 80 ビットであり、計算が完了すると 64 ビットとして格納されるため、違いが見られる場合もあります。

しかし、一般的に、同じハードウェアと同様のタイプのコンパイラが与えられた場合、2 つの異なる [十分に類似した] 言語から同じ結果 [およびほぼ同じパフォーマンス] が得られると期待しています。

ほとんどの言語には、"double" (通常は 64 ビット) または "single and double" (たとえば、float - 通常は 32 ビット、double - C/C++ では通常 64 ビット) しかありません。おそらく D も同様ですが、私はDにはそうではありません)。

于 2013-01-31T17:47:23.937 に答える
2

Go では、浮動小数点型は IEEE-754 標準に従います。

仕様から直接 ( http://golang.org/ref/spec#Numeric_types )

float32     the set of all IEEE-754 32-bit floating-point numbers
float64     the set of all IEEE-754 64-bit floating-point numbers

私は D に詳しくありませんが、このページは興味深いかもしれません: http://dlang.org/float.html

C/C++ の場合、標準は IEEE-754 を必要としませんが、C++ ではis_iec559()、コンパイラが IEEE-754 を使用しているかどうかを確認するために使用できます。この質問を参照してください: C++ コンパイラが IEEE 754 浮動小数点標準を使用しているかどうかを確認する方法

于 2013-01-31T18:01:18.537 に答える