2012-01-02 18 views
3

変数a = 6700000^2 * (a - b) (2 + sinf(a)+ s inf(b))が必要です。abは-7〜7の間の浮動小数点です。私は浮動小数点が与えるすべての精度が必要です。目的の計算で計算する

aはどのデータ型にする必要がありますか? sinfは、abの中から最高の精度を得るための適切な機能ですか? abは、ラジアンまたは度でなければなりませんか?


まあ、私は私が式を掲示するとき、正しい式は、C =6700万^ 2 *(AB)(2 + SINF(A)+ SINF(b)参照)で、私の問題は、Cであるミスをしました"a"と "b"は浮動小数点であり、浮動小数点数として渡されますが、実際には座標(緯度と経度)なので、私の心配ではありません...私の懸念は、そして、どのような型であるべきなのか私は精度を失うことはありません。なぜなら私は長い倍精度変数dを使って複数の異なるC変数の合計を格納しています。そして、dはゼロとして返されます。 1または2)私はC小包を計算するときに私はいくつかの精度を失っていたと思っていたので、私はgessingだった...私はCを使用していたダブル...それは私がCを計算するときにいくつかの精度を失うことができますか?

ありがとうございました。

+1

'(6700000)^ 2'はうまく再生できません。 – Blender

+0

@Blender、それはわずか13オーダーです!あなたのハードディスクには多分のビットがあります(たぶん)。 – Ben

+0

@Ben: 'float'は' 7'数字だけを格納します。 'double'は' 15'だけを格納します。 – Blender

答えて

1

floatの代わりに、メモリに関する心配がない場合は、doubleを使用する必要があります。 sinf()sin()に変更し、ラジアンを使用することを忘れないでください。

+0

'long double'と' double'はiOSで同じです(どちらもIEEE-754バイナリ64です)。 –

0

独自のタイプを使用せずに最高の精度を望む場合は、floatではなくdoubleを使用する必要があります。その場合は、sin(3)を使用してください。 man pageによれば、引数をラジアンで渡す必要があります。

3

floatがアプリケーションに適しているかどうかはわかりません。精度が必要な場合は、doubleを使用し、sinf()の代わりにsin()を使用してください。

標準的な三角関数は、relevant documentationを読んだ場合に検出されるように、角度をラジアンで表します。