цифры

Измените переменную используемую точность

Синтаксис

digits(d)
d1 = digits
d1 = digits(d)

Описание

пример

digits(d) устанавливает точность, используемую vpa к d значительные десятичные цифры. Значением по умолчанию являются 32 цифры.

пример

d1 = digits возвращает текущую точность, используемую vpa.

пример

d1 = digits(d) устанавливает новую точность d и возвращает старую точность в d1.

Примеры

Увеличьте точность результатов

По умолчанию MATLAB® использует 16 цифр точности. Для более высокой точности используйте vpa. Точность по умолчанию для vpa является 32 цифрами. Увеличьте точность вне 32 цифр при помощи digits.

Найдите pi с помощью vpa, который использует значение по умолчанию 32 цифры точности. Подтвердите, что текущая точность 32 при помощи digits.

pi32 = vpa(pi)
pi32 =
3.1415926535897932384626433832795
currentPrecision = digits
currentPrecision =
    32

Сохраните текущее значение digits в digitsOld и установите новую точность на цифры 100. Найдите pi с помощью vpa. Результат имеет 100 цифр.

digitsOld = digits(100);
pi100 = vpa(pi)
pi100 =
3.1415926535897932384626433832795028841971693993751058209...
74944592307816406286208998628034825342117068

Примечание

vpa вывод является символьным. Чтобы использовать символьный вывод с функцией MATLAB, которая не принимает символьные значения, преобразуйте символьные значения в двойную точность при помощи double.

Наконец, восстановите старое значение digits для дальнейших вычислений.

digits(digitsOld)

Для получения дополнительной информации смотрите Точность Увеличения Числовых Вычислений.

Увеличьте скорость путем уменьшения точности

Увеличьте скорость вычислений MATLAB при помощи vpa с более низкой точностью. Установите более низкую точность при помощи digits.

Во-первых, найдите время потраченным, чтобы выполнить операцию на большом входе.

input = 1:0.01:500;
tic
zeta(input);
toc
Elapsed time is 48.968983 seconds.

Теперь, повторите операцию с более низкой точностью при помощи vpa. Понизьте точность к цифрам 10 при помощи digits. Затем используйте vpa, чтобы уменьшать точность input и выполнить ту же операцию. Время взятые уменьшения значительно.

digitsOld = digits(10);
vpaInput = vpa(input);
tic
zeta(vpaInput);
toc
Elapsed time is 31.450342 seconds.

Примечание

vpa вывод является символьным. Чтобы использовать символьный вывод с функцией MATLAB, которая не принимает символьные значения, преобразуйте символьные значения в двойную точность при помощи double.

Наконец, восстановите старое значение digits для дальнейших вычислений.

digits(digitsOld)

Для получения дополнительной информации смотрите Скорость Увеличения путем Сокращения Точности.

Цифры охраны

Количество цифр, что вы задаете использование функции vpa или функции digits, является гарантируемым количеством цифр. Внутренне, тулбокс может использовать еще несколько цифр, чем вы задаете. Эти дополнительные цифры называются guard digits. Например, определите номер цифр к 4, и затем отобразите приближение с плавающей точкой 1/3 с помощью четырех цифр:

old = digits(4);
a = vpa(1/3)
a =
0.3333

Теперь, отобразите a с помощью 20 цифр. Результат показывает, что тулбокс внутренне использовал больше чем четыре цифры при вычислении a. Последние цифры в следующем результате являются неправильными из-за ошибки округления:

digits(20)
vpa(a)
digits(old)
ans =
0.33333333333303016843

Скрытые ошибки округления

Скрытые ошибки округления могут вызвать неожиданные результаты. Например, вычислите номер 1/10 с 32-разрядной точностью по умолчанию и с 10-разрядной точностью:

a = vpa(1/10)
old = digits(10);
b = vpa(1/10)
digits(old)
a =
0.1
 
b =
0.1

Теперь, вычислите различие a - b. Результат не 0:

a - b
ans =
0.000000000000000000086736173798840354720600815844403

a - b различия не равен нулю, потому что тулбокс внутренне повышает 10-разрядный номер b = 0.1 к 32-разрядной точности. Этот процесс подразумевает ошибки округления. Тулбокс на самом деле вычисляет различие a - b можно следующим образом:

b = vpa(b)
a - b
b =
0.09999999999999999991326382620116
 
ans =
0.000000000000000000086736173798840354720600815844403

Методы, используемые, чтобы преобразовать числа с плавающей запятой в символьные объекты

Предположим, что вы преобразовываете двойной номер в символьный объект, и затем выполняете операции VPA на том объекте. Результаты могут зависеть от метода преобразования, что вы раньше преобразовывали число с плавающей запятой в символьный объект. Функция sym позволяет вам выбрать метод преобразования путем определения дополнительного второго аргумента, который может быть 'r', 'f', 'd' или 'e'. Значением по умолчанию является 'r'. Например, преобразуйте постоянный π = 3.141592653589793... к символьному объекту:

r = sym(pi)
f = sym(pi,'f')
d = sym(pi,'d')
e = sym(pi,'e')
r =
pi
 
f =
884279719003555/281474976710656
 
d =
3.1415926535897931159979634685442
 
e =
pi - (198*eps)/359

Несмотря на то, что тулбокс отображает эти числа по-другому на экране, они - рациональные приближения pi. Используйте vpa, чтобы преобразовать эти рациональные приближения pi назад к значениям с плавающей точкой.

Определите номер цифр к 4. Три из этих четырех приближений дают тот же результат.

digits(4)
vpa(r)
vpa(f)
vpa(d)
vpa(e)
ans =
3.142
 
ans =
3.142
 
ans =
3.142
 
ans =
3.142 - 0.5515*eps

Теперь, определите номер цифр к 40. Различия между символьными приближениями pi становятся более видимыми.

digits(40)
vpa(r)
vpa(f)
vpa(d)
vpa(e)
ans =
3.141592653589793238462643383279502884197
 
ans =
3.141592653589793115997963468544185161591
 
ans =
3.1415926535897931159979634685442
 
ans =
3.141592653589793238462643383279502884197 -...
0.5515320334261838440111420612813370473538*eps

Входные параметры

свернуть все

Новая установка точности, заданная как номер или символьное число. Установка задает количество значительных десятичных цифр, которые будут использоваться для вычислений переменной точности. Если значение, d не является целым числом, digits, округляет его к самому близкому целому числу.

Выходные аргументы

свернуть все

Текущая установка точности, возвращенная как номер с двойной точностью. Установка задает количество значительных десятичных цифр, в настоящее время используемых для вычислений переменной точности.

Представлено до R2006a