pow с большими числами работать не будет.
Можно написать свою реализацию double (с нужной точностью), скорость выполнения естественно будет ниже, чем у double.
И для неё уже реализовывать всякие pow.
Плюс от задачи зависит — иногда можно обойтись без излишнего умножения, вроде:
Здравствуйте, alzt, Вы писали:
A>2,5 килобайта на число? Я думаю это немного не то, чего хотел rs2fun. A>Если он использует double, то ему не нужна абсолютная точность.
Ну так он как раз и спрашивал: R>pow vozvrashet double, chislo ne pomestitsya na double, kak sdelat tak chtobi pow rabotal s bolshimi chislami.
Вообще, понятно, что необходим класс со специальной логикой. Но в данном конкретном случае (степень двойки) можно сделать и так. Самый первый вариант, если помнишь, был "1 << 20000". Чем плохо?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, frogkiller, Вы писали:
F>Вообще, понятно, что необходим класс со специальной логикой. Но в данном конкретном случае (степень двойки) можно сделать и так. Самый первый вариант, если помнишь, был "1 << 20000". Чем плохо?
Пусть даже в виде строки
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, frogkiller, Вы писали:
F>Вообще, понятно, что необходим класс со специальной логикой. Но в данном конкретном случае (степень двойки) можно сделать и так. Самый первый вариант, если помнишь, был "1 << 20000". Чем плохо?
Попробуйте запустить сл. код:
int main()
{
long test = 1 << 20000;
return 0;
}
И посмотрите чему будет равна переменная test. Уверяю — это будет не 2 в 20000 степени.
Здравствуйте, alzt, Вы писали:
F>>Вообще, понятно, что необходим класс со специальной логикой. Но в данном конкретном случае (степень двойки) можно сделать и так. Самый первый вариант, если помнишь, был "1 << 20000". Чем плохо? A>Попробуйте запустить сл. код: A>
A>int main()
A>{
A> long test = 1 << 20000;
A> return 0;
A>}
A>
A>И посмотрите чему будет равна переменная test. Уверяю — это будет не 2 в 20000 степени.
) Наконец понял, что вызвало смех.
Разумеется, в long не влезет результат, так же как он не влез в double. Как было видно, в общем случае, потребуется 2.5 килобайтный кусок памяти, именно это я хотел показать предыдущими постами.
Так же сразу и надо было говорить .
В общем — pow всё равно работать не будет. Нужен свой.
Только в данном случае 2,5 килобайта резервировать не надо:
class my_num2
{
int m_powNum;//степень, в которой находится двойкаpublic:
my_num2():m_powNum(0){}
my_num2 pow(my_num2 num)
{
my_num2 res;
res.m_powNum = m_powNum + num.m_powNum;
return res;
}
};
Т.е. если возводить только степени двойки — то столько памяти хранить не надо. А если возводить другие числа, то смещение не поможет.
Здравствуйте, alzt, Вы писали:
A>Т.е. если возводить только степени двойки — то столько памяти хранить не надо. А если возводить другие числа, то смещение не поможет.
Именно так
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Здравствуйте, frogkiller, Вы писали:
F>Здравствуйте, alzt, Вы писали:
A>>В общем — pow всё равно работать не будет. Нужен свой. A>>Только в данном случае 2,5 килобайта резервировать не надо:
F>[skiped]
F>И вторая проблема, как представить такое большое число (в общем виде) в удобной для восприятия форме.
Да скорее всего и не надо. Требуется сравнить 2 числа — какое больше, может быть ключи шифрования каки-нибудь используются и т.п. Т.е. пользователю не требуется видеть что это за число, но видеть результат манипуляций с числами.
Если же всё-таки требуется, то подобно тому как в калькуляторе виндоус: 3.9802768403379665923543072061912e+6020.
Хотели тут вы, правда, все неправильно Вот и сейчас... Вообще, круто — сначала у вас было 2 ошибки в одном месте, потом одна, теперь опять одна. Прогресс .
F>>?
AS>Хотели тут вы, правда, все неправильно Вот и сейчас... Вообще, круто — сначала у вас было 2 ошибки в одном месте, потом одна, теперь опять одна. Прогресс .
Ну и в чём я ошибаюсь? Просветите, пожалуйста. В том, что порядок бит зависит от платформы/компилятора?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
F>>>?
AS>>Хотели тут вы, правда, все неправильно Вот и сейчас... Вообще, круто — сначала у вас было 2 ошибки в одном месте, потом одна, теперь опять одна. Прогресс
F>Ну и в чём я ошибаюсь? Просветите, пожалуйста. В том, что порядок бит зависит от платформы/компилятора?
Для начала — вы char range хорошо себе представляете? Пусть это будет однобайтовый чар, поскольку вы это и предполагали. Представили? Теперь посмотрите, что у вас было. Впрочем, в последнем варианте у вас тоже весело — вы нарисовали 2^(2499*8).
Здравствуйте, Andrew S, Вы писали:
AS>Для начала — вы char range хорошо себе представляете? Пусть это будет однобайтовый чар, поскольку вы это и предполагали. Представили? Теперь посмотрите, что у вас было. Впрочем, в последнем варианте у вас тоже весело — вы нарисовали 2^(2499*8).
Понял В первом случае должно быть 128. Будет 100...0 (1 и 19999 нулей) в бинарном виде при low endian.
А во втором случае я просто инверсировал эту последовательность, т.е. 00...0001 при том же порядке бит. Так что тут всё должно быть нормально. Мне казалось это более логичным, чем 0000...010000000.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
AS>>Для начала — вы char range хорошо себе представляете? Пусть это будет однобайтовый чар, поскольку вы это и предполагали. Представили? Теперь посмотрите, что у вас было. Впрочем, в последнем варианте у вас тоже весело — вы нарисовали 2^(2499*8).
F>Понял В первом случае должно быть 128. Будет 100...0 (1 и 19999 нулей) в бинарном виде при low endian.
А должно быть 1 и 20000 нулей.
F>А во втором случае я просто инверсировал эту последовательность, т.е. 00...0001 при том же порядке бит. Так что тут всё должно быть нормально. Мне казалось это более логичным, чем 0000...010000000.
И тут тоже неправильно. Для представления в бинарном виде 2^n требуется n+1 бит.
Здравствуйте, Andrew S, Вы писали:
AS>И тут тоже неправильно. Для представления в бинарном виде 2^n требуется n+1 бит.
Блин. Кажется, я перегрелся, так ступить...
Спасибо С позором удаляюсь
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re: pow(2,20000)
От:
Аноним
Дата:
05.06.07 16:12
Оценка:
Здравствуйте, rs2fun, Вы писали:
R>Zdrastvuyte. R>Kak vicheslit pow(2,200000); R>pow vozvrashet double, chislo ne pomestitsya na double, kak sdelat tak chtobi pow rabotal s bolshimi chislami. R>Spasibo zaraniye.
//
// печатает степени двойки 16ричной системе
// работает со степенями до 4млрд. с гаком (20тыс семечки!) :))
//void print_pow_in_hex(int pow)
{
const char * rem = "1248";
printf("0x%c", rem[pow%4]);
for(unsigned int i=0; i<pow/4; i++) {
printf("0");
}
printf("\n");
}
А так же питон с такими чудсами справляется на раз-два
Re: pow(2,20000)
От:
Аноним
Дата:
06.06.07 22:10
Оценка:
Здравствуйте, rs2fun, Вы писали:
R>Zdrastvuyte. R>Kak vicheslit pow(2,200000); R>pow vozvrashet double, chislo ne pomestitsya na double, kak sdelat tak chtobi pow rabotal s bolshimi chislami. R>Spasibo zaraniye.
Примерно 0x100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Возможно ошибся в пределах 16ричного порядка, спать хочу