У меня вопрос из чистого любопытства. Как происходит умножение больших чисел в MATLAB? Это Карацуба, Тоом-3, Фюрер или что-то совсем другое?
Умножение больших чисел в MATLAB
Ответ 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} $. Это может быть временная работа.