digits

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

Описание

пример

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'FD, или '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