The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Большие числа ((("
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Большие числа ((("  
Сообщение от Ivanoff (ok) on 03-Апр-08, 09:44 
необходимо посчитать некоторую функцию. результат не помещается в long double ((( В результате получаю:
Time W 1.#INFE+000
Time R -1.#INDE+000
Вот такие не красивые значения (
Вопрос:
1. Как быть? :)
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Большие числа ((("  
Сообщение от anonymous (??) on 03-Апр-08, 18:54 
GMP: http://gmplib.org/
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Большие числа ((("  
Сообщение от DeadMustdie email(??) on 03-Апр-08, 21:14 
>необходимо посчитать некоторую функцию. результат не помещается в long double ((( В
>результате получаю:
> Time W 1.#INFE+000
> Time R -1.#INDE+000
>Вот такие не красивые значения (
>Вопрос:
>1. Как быть? :)

Вообще похоже не столько на переполнение, сколько на вычисления какой-то функции над "некорректными" аргументами (такими, что на выходе бесконечность).

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Большие числа ((("  
Сообщение от angra (ok) on 04-Апр-08, 06:47 
Менять алгоритм вычислений, что же еще. Например на советских программируемых калькуляторах встроенная функция факториала после 61! была бесполезной, выходили за предел гугола, однако толково написаная программа позволяла вычислять факториалы в районе нескольких тысяч. В общем-то школьной математики должно хватать на большинство подобных преобразований.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Большие числа ((("  
Сообщение от f00l email(??) on 04-Апр-08, 07:13 
>необходимо посчитать некоторую функцию. результат не помещается в long double ((( В
>результате получаю:
> Time W 1.#INFE+000
> Time R -1.#INDE+000
>Вот такие не красивые значения (
>Вопрос:
>1. Как быть? :)

Если результат не помещается в long double  используй массив unsigned long так можно вычислить значение любой точности и любой величины.
  

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Большие числа ((("  
Сообщение от Ivanoff (ok) on 07-Май-08, 07:22 
> Если результат не помещается в long double  используй массив unsigned
>long так можно вычислить значение любой точности и любой величины.
>

Я не думаю что какой либо из стандартных типов способен вместить нужные мне значения... чтобы не тыкать пальцем в небо приведу одну из функций:
p(j)=( (a/b)^j * 1/j! )/ (SUM[l=0,N](a/b)^l * 1/l!) где:
j:=9000 - 10000 SUM[l=0,N] - сумма от 0 до N N достигает 10000. a/b - константа = 1000.
В итоге при самом безобином значении j необходимо посчитать 1000^9000 не жестоко ли? :)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Большие числа ((("  
Сообщение от Pikador (ok) on 07-Май-08, 10:19 
>[оверквотинг удален]
>>
>
>Я не думаю что какой либо из стандартных типов способен вместить нужные
>мне значения... чтобы не тыкать пальцем в небо приведу одну из
>функций:
>p(j)=( (a/b)^j * 1/j! )/ (SUM[l=0,N](a/b)^l * 1/l!) где:
>j:=9000 - 10000 SUM[l=0,N] - сумма от 0 до N N достигает
>10000. a/b - константа = 1000.
>В итоге при самом безобином значении j необходимо посчитать 1000^9000 не жестоко
>ли? :)

Для питона нет:

$ cat tmp.py
#!/usr/local/bin/python
# -*- coding: cp1251 -

print 1000L**9000

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Большие числа ((("  
Сообщение от f00l (ok) on 07-Май-08, 17:09 
>[оверквотинг удален]
>>
>
>Я не думаю что какой либо из стандартных типов способен вместить нужные
>мне значения... чтобы не тыкать пальцем в небо приведу одну из
>функций:
>p(j)=( (a/b)^j * 1/j! )/ (SUM[l=0,N](a/b)^l * 1/l!) где:
>j:=9000 - 10000 SUM[l=0,N] - сумма от 0 до N N достигает
>10000. a/b - константа = 1000.
>В итоге при самом безобином значении j необходимо посчитать 1000^9000 не жестоко
>ли? :)

Любое число можно разместить в массиве (пока хватит памяти).
Твое число 1000^9000 умещается всего в массив размером 27000 байт(это если один порядок кодируется одним байтом (в десятичной системе исчесления)),а оптимизировать то и того меньше (в шестнадцетиричной).

  

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Большие числа ((("  
Сообщение от ben on 07-Май-08, 14:45 
>необходимо посчитать некоторую функцию. результат не помещается в long double ((( В
>результате получаю:
> Time W 1.#INFE+000
> Time R -1.#INDE+000
>Вот такие не красивые значения (
>Вопрос:
>1. Как быть? :)

int64 никто не отменял для unix
и LARGE_INTEGER под виндой

а насчет токо что вывели скорее всего неправильно чтото посчитано и некорректно сработал printf или чем вы его там выводили


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Большие числа ((("  
Сообщение от аноним on 17-Май-08, 04:13 
>1. Как быть? :)

можно еще так (проверки удалены)

char str[BIG_ENOUGH];
FILE *f;
system("sh -c \"echo '1000^9000' > /tmp/formula\"");
f = popen("sh -c \"cat /tmp/formula | env BC_LINE_LENGTH=1000000 bc\"", "r");
fgets(str, str_size, f);

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Большие числа ((("  
Сообщение от angra (ok) on 17-Май-08, 04:41 
Мсье знает толк в извращениях. Вы бы еще для ассемблера предложили подобный способ

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Большие числа ((("  
Сообщение от аноним on 17-Май-08, 15:51 
>Мсье знает толк в извращениях.

а чем плох метод ? задача уже решена в избыточном виде, осталось только использовать соотв. инструменты. не в ботлнэке это (имхо) самый простой подход; зачем писать то, что уже написано ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Большие числа ((("  
Сообщение от angra (ok) on 19-Май-08, 02:14 
Не спорю что гвозди можно забивать микроскопом, колбасу нарезать микротомом, а из пушки палить по воробьям. Вот только лично для мне это кажется извращением. Делать на С/С++  вызов кучи внешних программ вместо простейшей операции из нескольких арифметических  команд - это надо быть либо дегенератом, либо извращенцем. На всякий случай замечу что аналогичные действия на баше извращением не являются, там это норма, но вот уже на perl/python/etc это уже под большим вопросом.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру