Отображение десятичных знаков переменной с помощью sprintf в MATLAB - PullRequest
6 голосов
/ 19 ноября 2010

Я не понимаю, что происходит с помощью команды sprintf .

>> vpa(exp(1),53)

ans =

2.7182818284590455348848081484902650117874145507812500


>> e = 2.7182818284590455348848081484902650117874145507812500

e =

2.7183

>> sprintf('%0.53f', e)

ans =

2.71828182845904550000000000000000000000000000000000000

Почему sprintf показывает мне число e, округленное вместо числаа я держался на первом месте?

1 Ответ

5 голосов
/ 19 ноября 2010

Переменные имеют двойную точность по умолчанию в MATLAB, поэтому создаваемая переменная e ограничена точностью до двойной величины, которая составляет около 16 цифр.Даже при том, что вы ввели больше цифр, двойник не имеет точности для точного представления всех этих дополнительных цифр и округления до ближайшего числа, которое он может представить.

РЕДАКТИРОВАТЬ: Как объяснено вболее детально Эндрю Янке в своем ответе на этот дополнительный вопрос Я написал, число, которое вы выбрали для e, оказывается точным десятичным расширением двоичного значения.Другими словами, это точно представимое значение, до которого будет округлено соседнее число с плавающей точкой.Однако в этом случае все, что больше, чем приблизительно на 16 цифр после десятичной точки, не считается значимым, поскольку оно не может быть точно представлено типом двойной точности.Поэтому такие функции, как SPRINTF будут автоматически игнорировать эти небольшие значения, вместо этого печатая нули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...