Ich versuche, den Modulo-Operator (%) auf lange longs zu verwenden, und es scheint 0 zurückzugeben, wenn die Zahl über dem Bereich eines unsigned int ist. Gibt es einen Operator oder eine Funktion, die ich stattdessen verwenden sollte, oder sollte ich meine eigenen rollen?Modulo mit langen langen ganzen Zahlen in Objective C
- Update: vor für den Mangel an Beispiel-Code sorry, ich war in Eile, die Tür aufmachen -
Hier ist der Code:
long long val = 12345678991245; // always less than LLONG_MAX
int power = 0;
NSMutableArray *powers = [[NSMutableArray alloc] init];
while (pow(10, power) <= val) {
tVal = (val % (lround(pow(10, power + 1))))/lround(pow(10, power));
[powers addObject:[NSNumber numberWithInt:tVal]];
NSLog(@"Power: %d tVal: %d", power, tVal);
val -= val % lround(pow(10, power + 1));
power++;
}
Wenn Sie am Ausgang aussehen gemacht von dieser NSLog
Aussage, Sie dies aber sehen, wenn die Zahl UINT_MAX
übersteigt (für die Nummer 1,111,111,111,111):
2009-03-18 20:42:16.471 Numbers[11197:20b] Power: 0 tVal: 1
2009-03-18 20:42:16.472 Numbers[11197:20b] Power: 1 tVal: 1
2009-03-18 20:42:16.473 Numbers[11197:20b] Power: 2 tVal: 1
2009-03-18 20:42:16.476 Numbers[11197:20b] Power: 3 tVal: 1
2009-03-18 20:42:16.476 Numbers[11197:20b] Power: 4 tVal: 1
2009-03-18 20:42:16.477 Numbers[11197:20b] Power: 5 tVal: 1
2009-03-18 20:42:16.477 Numbers[11197:20b] Power: 6 tVal: 1
2009-03-18 20:42:16.477 Numbers[11197:20b] Power: 7 tVal: 1
2009-03-18 20:42:16.477 Numbers[11197:20b] Power: 8 tVal: 1
2009-03-18 20:42:16.478 Numbers[11197:20b] Power: 9 tVal: 0
2009-03-18 20:42:16.478 Numbers[11197:20b] Power: 10 tVal: 0
2009-03-18 20:42:16.479 Numbers[11197:20b] Power: 11 tVal: 0
2009-03-18 20:42:16.479 Numbers[11197:20b] Power: 12 tVal: 0
Alles ist koscher bis Sie kommen bis zu UINT_MAX
, dann gibt es nur 0.
Ich kompiliere gegen das iPhone SDK mit Xcode 3.1.2.
Irgendwelche Ideen?
Bitte seien Sie spezifischer (zeigen Sie Code, welches Argument/Ergebnis ist über int-Bereich, was ist Ihr Compiler/Plattform ...). In jedem Fall würde ich vermuten, dass es sich um einen Compiler Bug handelt. – starblue
"Es scheint"? Ich bin kein ObjC-Guru, aber ich denke, das Problem mit einem Code zu demonstrieren wäre großartig. Vielleicht haben Sie ein Problem mit dem "Es scheint" -Teil, da ich nirgends Bezugnahmen auf Modulgrenzen finden konnte. – DevSolar