Задать вопрос
Isolution666
@Isolution666
Full-Stack Developer

Как считать очень большие числа, и на каком языке программирования?

Здравствуйте.
--
Очень прошу отнестись к этому вопросу со всей серьёзностью. Хочу знать именно экспертное мнение программистов и математиков. Так вот, суть вопроса. В мире есть очень огромные числа, и их наверняка как-то считают, чтобы вы понимали, в этих числах астрономически огромное число нулей, не один современный калькулятор не способен ввести себя хотя бы одно число, не говоря уже о том, чтобы умножить, прибавить, разделить, вычесть или возвести в степень второе число. Чтобы не тратить целый день на то, чтобы написать только одно число для примера, я прилагаю
весь список чисел который удалось найти

Единица
Десять
Сто
Тысяча
Миллион
Миллиард
Триллион
Квадриллион
Квинтиллион
Сикстиллион
Септиллион
Октиллион
Нониллион
Дециллион
Вигинтиллион
Центиллион
Миллеиллион
Мириада
Гугол
Асанкхейя
Гуголплекс
Второе число Скьюза
Мега
Мегистон
Мозер
Число Грэма
Стасплекс
Авогадро.

не знаю, может ли быть что-то ещё больше чем последнее число в этом списке. Так вот, что-то мне подсказывает, что обычной вычислительной мощности компьютера может не хватить при вычислении таких чисел. Соответственно нужен и соответствующий язык программирования, который будет в состоянии считать хотя бы числа Грэма, не говоря уже о грэмаплексе.

Чтобы вы понимали, я говорю не о маленьких числах по типу:
263.130.854.592.673.365.047.218.012.160.000.000.000.000.000.000

А о числах в которых может быть и миллион и квинтиллион цифр. Я ещё не пробовал посчитать такие числа на Python - но очень интересно, получится ли такое посчитать. В php я рискнул только с цифрами не превышающими 50 знаков. И код считает эту простую операцию очень долго. И зачастую вставляет букву "е" в число. Никаких букв при вычислении быть не должно. Если введу число в котором миллион цифр, боюсь этим сжечь ЦП ))
Может даже памяти не хватит.
Поясню, что простые операции с числами - это тест, если я найду способ считать огромные числа, это потом понадобится для вычисления матриц, степеней, триангуляционных решений и получения корней.
Чтобы оценить сложность этой задачи, покажу не очень большие цифры, которые помещаются на экране.
561325_original.png
Вы могли их уже видеть, ну вдруг кто не имеет представления.
Конечная цель, это измерение площадей, расстояний и 3х мерных неровных пространств.

Благодарю всех кто с пониманием и с серьёзностью отнёсся к этому вопросу. Надеюсь среди нас есть кто-то, кто представляет как это всё считать.
Возможно это будет знакомо понятно и интересно тем, кто изучает астрономию.
https://spacegid.com/interaktivnaya-shkala-masshta...
  • Вопрос задан
  • 5548 просмотров
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 9
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Не такие и большие числа :)
https://github.com/aleaxit/gmpy

Кроме того посмотрите в сторону Fortran, там много готовых библиотек именно для научных вычислений.

В общем случае библиотеки есть для любого ЯП
Ответ написан
6yntar05
@6yntar05
Я клоун и это не обсуждается
Не претендую на решение, но думаю что число лучше записывать в String или похожую строку и частями считать
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Любая библиотека с поддержкой arbitrary-precission подойдёт.

Но мне кажется что автору это не надо. Физические величины (расстояния) невозможно менять настолько точно чтобы уже 40 младших знаков имели смысл.
Ответ написан
Griboks
@Griboks
Если кратко, то это невозможно.

Если подробно, то используют всякие уловки:
1. символьные вычисления (когда мы упрощаем формулы вместо чисел)
2. относительная точность (когда мы обнуляем ненужные знаки)
Так, число Авогдаро = R/k = 6е23, и нет там никакого огромного количества цифр.

Но если вы хотите убедиться в невозможности решения, тогда просто перейдите от двоичной/десятичной системы счисления в, например, байтову. Тогда ваше число можно записать как BigInt:
sign*(type_size^n*array[n]+...+type_size^1*array[1]+type_size^0*array[0])

Заметим, что длина массива тоже имеет определённый тип, поэтому вам придётся использовать списки. Останется только реализовать нужные вам операции. Посмотрите реализацию BigInt в вашем языке.
Ответ написан
Zoominger
@Zoominger
System Integrator
Используйте метематические пакеты типа Mapleили Matlab.
Есть бесплатные аналоги.
Ответ написан
Комментировать
HemulGM
@HemulGM
Delphi Developer, сис. админ
Я как-то давно делал подобное приложение. Хотя, делал только сложение чисел. Пришлось делать 64bit версию, чтобы считать числа "длинной" в больше чем миллионы знаков. Делал на Delphi. Код достаточно скромный.
https://github.com/HemulGM/HandleSumm
5ea521552cd17785359902.png
Ответ написан
@Yermack
Таки попробуйте питон: единственное что ограничивает это оперативка. Почти полмиллиона знаков весом почти четыре сотни Мб посчитало за 3сек
import sys

X = 124456**78901

sys.getsizeof(str(X))/1024, len(str(X))
# (392.6279296875, 402002)


Хотя на Джулии получилось быстрее
julia> @time X = BigInt(124456)^7890123;
  0.848368 seconds (6.49 k allocations: 146.362 MiB, 9.79% gc time)

julia> length(string(X))
40200302
Ответ написан
Комментировать
@Kot1que
пишу на жаве
Даже если вы возьмёте первый из Top-500 суперкомпьютеров и, отбросив всё устройство компьютера, сможете использовать всю его оперативную память (250 петабайт) для кодирования одного единственного числа, то максимальное будет иметь (очень грубая оценка) всего 6.7*10^17 знаков. Даже близко не гуголплекс :)
Ответ написан
@evgeniy_lm
Понятие "точность расчетов" хорошо иллюстрирует анекдот:
Экскурсовод в музее:
- Этому экспонату примерно 3005 лет.
Экскурсант:
- Как вы так точно определили!?
Экскурсовод:
- 5 лет назад, когда я устраивался на работу, директор сказал, что этому экспонату примерно 3000 лет

В реале большие точные числа нужны только в алгоритмах шифрования и ни где более.
Как правило большое число представляется в виде массива байт и есть соответствующие функции их обработки. Я, даже, давно сам этим баловался, ничего сложного там нет.
Ваш ГУГОЛ это всего навсего 42 байта, а алгоритмы RSA используют числа длинной 64 и более байт
Еще есть алгоритмы вычисления числа пи, но это немного другая история которая практической пользы не имеет
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы