2009-08-26 7 views
0

私はNSDecimalNumberに移植したいいくつかの倍を持っています。なぜなら、私はあまりにも浮動小数点算術エラーを受け取りすぎているからです。これをNSDecimalNumberに移植する方法?

彼らは以下のとおりです。

double one = 0.0000001; 
double two = 1000000000.0000001; 

は、彼らは非常に問題ですが、私はNSDecimalNumberは計算が権利を取得するために助けることができることを願っています。私はそれほど大きな数学の天才ではないので、NSDecimalNumberのこのメソッドに正しい入力を与える方法を考えるのです。

は私が試してみましょう:

NSDecimalNumber *one = [NSDecimalNumber decimalNumberWithMantissa:1 exponent:-7 isNegative:NO]; 

NSDecimalNumber *two = [NSDecimalNumber decimalNumberWithMantissa:10000000000000001 exponent:-7 isNegative:NO]; 

私はそれが間違っている気がします。私は推測するしかなかった。ドキュメンテーションはそれに関する多くの情報を提供していません。しかし、私が得る限り、「仮数」は整数であり、指数部は浮動小数点がどこにあるべきかをゼロを加えることによって指示します。おそらくこれも間違っています;-)

私はいくつかのコードスニペットを見てきましたが、人々は単にCGFloatを仮名として与え、指数として0を与えましたが、私は彼らの意図が何であったか推測できます。それはそれを理解することなく同じ方法です。

答えて

0

このクラスのreferenceでは、番号はmantissa x 10^exponentで表されます。

あなたはあなたの前提にかなり似ています。

あなたの番号は、まずmantissaです。小数点はあなたの番号の後にあり、右に押されますexponent回(指数が正の場合は、点が右側にとどまるのでゼロが追加されます)。最後に、isNegativeフラグに従って、マイナス記号があなたの番号の前に置かれます。あなたは123 * 10^(-3)を持っている場合

だから例えば、それは123.で始まり、小数点以下が3桁がこのタイプにも制限があることを

注以前のように残され0.12312.31.23の上に行きます。 referenceは、それらを示しています

[...]仮数は38 digits longまでの小数の整数であり、指数はたぶん127

–128から整数であり、Wikipediaは科学的に説明することができますあなたがここで使用しなければならない正確に数字の表記です:-)

+0

ありがとうエタン、私は私の古い学校の記憶が今戻ってくると思います。その負の指数物だけがあまりにも私には分かりません。すなわち、仮数部が123で、仮数部が-3であれば、0.000123のような数字がありますか? –

+0

10^-3は0.0001ではなく0.001です。したがって、仮数が1.23で、あなたのexpが-3であれば、0.00123になります。 –

+0

仮数が123の場合、exp -3は0.123 –

関連する問題