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>Т.е. если возводить только степени двойки — то столько памяти хранить не надо. А если возводить другие числа, то смещение не поможет.
Именно так
Курица — это инструмент, с помощью которого одно яйцо производит другие.