какой тип использовать, когда long double недостаточно? - PullRequest
2 голосов
/ 17 июля 2010

Я пишу программу, которая присваивает простые числа каждой записи матрицы, а затем мне нужно умножить некоторые из них. Результирующее число быстро растет, и я не знаю, какой тип использовать, так как получаю "обход" с long double: S

Вся помощь приветствуется.

-Pickel

Ответы [ 6 ]

3 голосов
/ 17 июля 2010

Если вам не требуется реализовать собственный произвольный тип точности, используйте GMP . Вам понадобится тип mpz_t (целое число). Это довольно хорошо задокументировано, и есть учебники и вопросы StackOverflow, на которые вы можете посмотреть.

0 голосов
/ 17 июля 2010

Если вы отказываетесь использовать библиотеку и не хотите изобретать свои большие типы, почему бы вам не отслеживать дополнительные факторы 2 или что-то в этом роде.

while ( mybignum > BIGNUM_THRESH )
{
    twos++;
    mybignum /= 2; // use >>=1 if you use an integer type (you said you used double so therefore the /=)
}

затем распечатайте ваши ответы как mybignum * 2**twos

Возьмите 64-битное целое число для двойки, и вы в безопасности до 2 ^ 2 ^ 64

0 голосов
/ 17 июля 2010

если это целое число, используйте класс BigInteger (в Java или .NET)

если это число с плавающей запятой, используйте BigDecimal (только в java .net по-прежнему не имеет плавающей числа произвольной точности

если вы находитесь в C / C ++, вы должны создать свой собственный тип

0 голосов
/ 17 июля 2010

Предполагая, что вы используете "long double" в качестве типа, это присвоение C или C ++?

Насколько велики ваши цифры?

Максимальное значение в сравнении с размером long и double в .NET

обсуждает некоторые связанные вещи, но может выходить за рамки вашего задания

Вообще говоря, вам нужна библиотека произвольной точности:

http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic

Но есть вероятность, что в целях выполнения задания вам не нужно усложнять ситуацию, требуя использования APL

0 голосов
/ 17 июля 2010

Если это просто целые числа, есть long long int (по крайней мере, в C / C ++). Если мы говорим о двойниках ... Используйте класс BigDecimal.

0 голосов
/ 17 июля 2010

Возможно, вам придется реализовать свой собственный большой тип целого числа.Выезд:

BigInt

...