Управление точностью числа с плавающей запятой в Matlab

Я делю число, скажем

x=2;
y=1/3;
z=x*y;

Я ожидаю, что z будет 0.66666666666667, т.е. 14 цифр после запятой и то же самое для y. Теперь, когда я это делаю, я получаю только 0.6667. Как расширить ответ до точной 14-значной точности?


person MSD    schedule 20.08.2013    source источник
comment
Попробуйте ввести format long g в командной строке   -  person Dan    schedule 20.08.2013
comment
это дает мне 15 цифр после запятой. я хочу ровно 14. как это сделать   -  person MSD    schedule 20.08.2013
comment
Затем округлить до 14 мест   -  person Dan    schedule 20.08.2013


Ответы (3)


Если речь идет только о отображении числа, вы можете использовать функцию sprintf

str = sprintf('%.14f', pi); % print PI with exactly 14 digits after decimal point
disp(str);

Или fprintf всего одной строкой:

fprintf('%.14f', pi);

fprintf предназначен для записи в файлы, но выводит результат строки на экран, если файл отсутствует. указан идентификатор.

person Deve    schedule 20.08.2013

Если вы действительно хотите, чтобы число имело такую ​​точность, округлите его до 14 знаков следующим образом:

format long g

x=2;
y=1/3;
z=x*y;
round(z*1e14)/1e14

ans =      0.66666666666667

Если речь идет только об отображении, используйте решение Deve sprintf.

person Dan    schedule 20.08.2013

вы можете ввести в матлабе:

digits(10)

это дает вам большую точность с плавающей запятой, а также

digits(20)

Например:

 a=1/3
ans = 0.3333
digits(10)
 vpa(a)
 ans= 0.3333333333

найдите справку по Matlab, набрав doc в командном окне, а затем выполните поиск: цифры

person zizi    schedule 17.02.2015
comment
ой, я имею в виду цифры (10) - person zizi; 17.02.2015
comment
Использование модуля Variable Precision Arithmetic (Арифметика с переменной точностью) — это задница (без обид) способ показать больше цифр точности, если вам требуется отображать только небольшое количество цифр. Используйте vpa только в том случае, если вам требуется гораздо большее количество цифр точности. В данном конкретном случае vpa здесь не требуется. - person rayryeng; 04.12.2015