0

コードを投稿せずに申し訳ありません。この質問は、xcode ios で作業するときの浮動小数点数による除算と乗算に関するものです。

2.055926336e+09 で割る必要がある変数があります。残念ながら、コンパイラはそれを分割しませんか?

コードでの使用方法

float variable1=((variable2)/(2.055926336e+09));

これは、より小さい値で除算する場合に当てはまります (例: - (1/(2.055926336e+09) ) ) この理由は何ですか?これを行うための効率的な方法はありますか?

前もって感謝します!

4

3 に答える 3

7

問題はあなたの計算にはないのではないかと思います。それはあなたの印刷物にあります。おそらく、のような形式を使用して回答を印刷しようとしています%f。デフォルトで%fは、小数点の右側に6桁を出力します。

10 / 2.055926336e +09の値は0.000000004863987500377056...です。ご覧のとおり、小数点の直後に6つ以上のゼロがあります。を使用してフォーマットしようとすると%f、ゼロになります。

代わりに%e(または%g)を使用してフォーマットすると、フォーマッターは科学的記数法を使用し、結果をとして4.863988e-10出力して、結果がゼロではないことを示します。

于 2012-07-01T20:18:40.260 に答える
1

「割り切らない」というのは、返ってくる結果が ということ0ですか?

もしそうなら、あなたの問題は浮動小数点の精度です。 10 / 2055926336信じられないほど小さい数です。浮動小数点数の精度は小数点以下 6 桁までしかなく、これを正確に格納することはできません。

問題は、数値が大きすぎることではなく、結果が小さすぎることです。代わりにデータ型を使用してみてくださいdouble。ただし、数値がこれよりもさらに小さくなると機能しないことに注意してください (double の精度は 15 桁です)。

于 2012-07-01T20:06:38.900 に答える
0

@rob mayoff の答えは非常に有効ですが、科学的な結果をユーザーに表示することに興味がないかもしれません。私の見解は、大きな数を2つの文字列に分割し、以下のように連結することです

-(NSString*) stringWithLargeNumber:(double)large
{
    int fraction1 = large/10000;
    float fraction2 = large-fraction1;
    return [NSString stringWithFormat:@"%d%.2f", fraction1, fraction2];
}

お役に立てれば

于 2013-04-12T11:26:53.243 に答える