Найменше ціле число більше, ніж дуже велике число

Я намагаюся знайти найменше ціле більше, ніж дуже велике число (наприклад, exp (5000000)). Як я буду робити це? Якщо не програмно (тому що це оцінює до нескінченності або переповнення в MATLAB або моєму калькуляторі), то математично? (Ви вже спробували exp (floor (log (exp (5000 * 1024))))), але це просто дасть нескінченність).

4
Щоб дати вам уявлення про те, наскільки це число, я спробував виконати наступне в MATLAB з Symbolic Toolbox: ceil (sym ('exp (5000000)')) результат величезний: pastebin.com/BXDbPydL
додано Автор Amro, джерело
Так. Це приблизно 2,17 мільйона цифр. Величезний.
додано Автор user85109, джерело
що саме ви маєте на увазі, знайшовши його математично? Ви шукаєте функцію, яка надає, наприклад, свою n-й цифру?
додано Автор vlsd, джерело
Я не розумію, чому розмір номера має бути проблемою. Навіть якщо для запису єдиної цифри використовується цілий байт, файл, що містить цей номер, як і раніше не буде більшим за 3 Мб.
додано Автор vlsd, джерело

4 Відповіді

Ви хочете щось забезпечити арифметику змінної точності, таку як Symbolic Math Toolbox і функція перекриття .

3
додано

Подібно Klas sais. Якщо ви ціле, N , то найменше велике ціле число - N + 1 . Щоб обчислити це за допомогою, наприклад, C, можна написати таку функцію, як

unsigned long smallestLargerInteger(unsigned long startNum) {
  return startNum +1;
}

Щоб переконатися, що ви не переповнені довгими , ви можете мати щось подібне

#define __HALF_MAX_SIGNED(type) ((type)1 << (sizeof(type)*8-2))
#define __MAX_SIGNED(type) (__HALF_MAX_SIGNED(type) - 1 + __HALF_MAX_SIGNED(type))
#define __MIN_SIGNED(type) (-1 - __MAX_SIGNED(type))

#define __MIN(type) ((type)-1 < 1?__MIN_SIGNED(type):(type)0)
#define __MAX(type) ((type)~__MIN(type))

unsigned long smallestLargerInteger(unsigned long startNum) {
  if(__MAX(long) == startNum) {
   //handle overflow error messaging here
  }

  return startNum +1;
}
2
додано

Якщо ви хочете обчислити всі цифри великого числа, найпростішим рішенням, мабуть, буде використання Maple або Mathematica. Якщо ви просто хочете щось просте та безкоштовне, ви можете скористатися Wolfram Alpha .

Наприклад:

2
додано

Вам потрібно використовувати бібліотеку, яка обробляє великі числа.

Моя Google karma, мабуть, вказує на Symbolic Math Toolbox

0
додано
@JustinM Ви маєте рацію. Я видалив неправильне твердження.
додано Автор Klas Lindbäck, джерело
Але N - ціле число, а не число. exp (5000000) не обов'язково може бути цілим числом.
додано Автор Justin M, джерело