0

が intfor-loopかどうかを判断するためにa を使用しています。for ループが 2 から^1/2の間のlong double別のループをループするように設定しました。は、基本的に 2 の 2-10 乗 - 1 である、私が設定したループです。次に、 が整数かどうかを確認しています。私の質問は、整数である値のみを取得するにはどうすればよいですか? 私の説明は少し混乱したかもしれないので、ここにループコード全体を示します。ところで、私はこれらの数を大幅に増やすことを計画しているので、ロングダブルを使用しています。long doublefinalFinalfinalfinal

for (long double ld = 1; ld<10; ld++) {
    long double final = powl(2, ld) - 1;
    //Would return e.g. 1, 3, 7, 15, 31, 63...etc.

    for (long double pD = 2; pD <= powl(final, 0.5); pD++) {
    //Create new long double
    long double newFinal = final / pD;
    //Check if new long double is int
    long int intPart = (long int)newFinal;
    long double newLong = newFinal - intPart;

    if (newLong == 0) {
        NSLog(@"Integer");
        //Return only the final ints?
    }
}
}
4

1 に答える 1

1

それをintにキャストして、それ自体から減算するだけですか?

long double d;
//assign a value to d

int i = (int)d;
if((double)(d - i) == 0) {
    //d has no fractional part
}

注意として...浮動小数点演算がプログラミングで機能する方法のため、この==チェックは必ずしも最善の方法ではありません。ある程度の許容範囲を決めて、dその許容範囲内に収まっているかどうかを確認した方がよいでしょう。

例えば:

if(fabs((double)(d - i)) < 0.000001) {
    //d's fractional part is close enough to 0 for your purposes
}

long long intと を使用しlong doubleて同じことを行うこともできます。使用しているタイプに関係なく、正しい絶対値関数を使用していることを確認してください。

  • fabsf(float)
  • fabs(double)
  • fabsl(long double)

編集...実際の問題の明確化に基づいて...メソッドからコレクションを返す方法を理解しようとしているようです。

-(NSMutableArray*)yourMethodName {
    NSMutableArray *retnArr = [NSMutableArray array];

    for(/*some loop logic*/) {
        // logic to determine if the number is an int

        if(/*number is an int*/) {
            [retnArr addObject:[NSNumber numberWithInt:/*current number*/]];
        }
    }

    return retnArr;
}

このメソッドにロジックを組み込みます。返したい数値が見つかったら、そこにある[retnArr addObject:[NSNumber numberWithInt:]];方法を使用して配列に貼り付けます。

配列を返したら、次のように数値にアクセスします。

[[arrReturnedFromMethod objectAtIndex:someIndex] intValue];

NSNumber必要に応じて、それらを異なる型としてオブジェクトにスローしたい場合があります。

以下も使用できます。

  • [NSNumber numberWithDouble:]
  • [NSNumber numberWithLongLong:]

そして、数値を抽出するための一致するゲッター ( doubleValue、 ) があります。longLongValueには他にも多くの方法がありますがNSNumber、これらは、使用する可能性が最も高いようです。

于 2013-12-12T02:09:16.480 に答える