Умножение больших чисел в MATLAB

У меня вопрос из чистого любопытства. Как происходит умножение больших чисел в MATLAB? Это Карацуба, Тоом-3, Фюрер или что-то совсем другое?

Ответ 1

Если вас интересует алгоритм вычисления, например 139676498390139139676498390676498390*8745566554641239676498390676498390, то это происходит:

  • оба числа преобразуются в double в IEEE® Standard 754
  • как таковое, представление неточно, потому что doubles может точно представлять целые числа до 2^53-1 (проверить документацию функции bitmax) (~ 10^15, а ваши номера находятся в порядке 10^35).
  • умножение выполняется с использованием чисел с плавающей запятой с двойной точностью и, следовательно, также приближается

Посмотрите на этот примерный код:

>> a=139676498390139139676498390676498390;
>> num2str(a)

ans =

139676498390139141600015724509659136

что явно не соответствует значению, присвоенному a - соответствуют только первые 16 цифр.

Ответ 2

Нет встроенного класса BigInteger, если это то, что вы имеете в виду. Вы можете использовать панель инструментов с фиксированной точкой или импортировать соответствующие классы java/.NET.

По умолчанию номера представлены в формате с плавающей точкой двойной точности IEEE.

Ответ 3

Добавляя к ответу, если вам нужно больше цифр точности, вы можете попытаться использовать этот fex файл

Ответ 4

Если ваши номера только большие, но вам не требуется большое количество значимых цифр. Вы можете умножить небольшое число с каждым умножением, например $10 ^ -1 $. Следите за количеством умножений $N $и получите значение в $10 ^ {- N} $. Это может быть временная работа.