Как разбить большие числа на более управляемые части в iOS? - PullRequest
0 голосов
/ 01 августа 2011

Я хочу создать приложение для iOS, которое использует случайное 80-битное число, но я практически уверен, что текущее оборудование не может обрабатывать такие большие числа. Так как же можно разбить число на более мелкие части? Пока что лучшее, что я могу придумать, - это разбить его на 4 20-битных блока, но я не доволен тем, сколько процессорной мощности для этого нужно. Спасибо за любую помощь, которую вы можете оказать мне.

Ответы [ 3 ]

0 голосов
/ 02 августа 2011

Если вы хотите выполнять вычисления с этим числом, вам, вероятно, лучше использовать существующую библиотеку, такую ​​как GMP , вместо разработки собственной.Если он просто используется как хеш, криптографический ключ или что-то в этом роде, вы должны использовать NSData или необработанный байтовый массив.

0 голосов
/ 02 августа 2011

Разве не было бы достаточно эффективно создать класс с булевыми значениями 80 malloc? тип BOOL уже имеет значение «истина / ложь», и дополнительная нагрузка на память является минимальной проблемой, эквивалентной стоимости памяти двух или трех жестко закодированных строк. Я попробую для примера ниже:

НЕПРОВЕРЕННЫЙ КОД:

@interface KenoBoard : NSObject{

    BOOL * boardSelections;

}

-(BOOL)selectionForPosition:(int)number;
-(void)setSelection:(BOOL)selection forPosition:(int)number;

@end

@implementation KenoBoard

-(id)init{
    if(self = [super init]){
        boardSelections = calloc(80*sizeof(BOOL));
    }
    return self;
}

-(void)dealloc{
    free(boardSelections);
    [super dealloc];
}

-(BOOL)selectionForPosition:(int)number{
    if (number >= 80){
        ...make a NSException here
        @throw exception
    }
    return boardSelections[number];
}

-(void)setSelection:(BOOL)selection forPosition:(int)number{
    if (number >= 80){
        ...make a NSException here
        @throw exception
    }
    boardSelections[number] = selection;  
}

@end
0 голосов
/ 02 августа 2011

Как насчет двух целых и коротких?Это даст вам 32 + 32 + 16 = 80 бит.Я не могу сказать, что вы пытаетесь сделать, но я бы не стал беспокоиться о производительности процессора на этом этапе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...