Я хотел бы сохранить числа с плавающей точкой в двоичном файле и прочитать их впоследствии для дальнейшей обработки. К сожалению, fwrite и afterfread изменяет число.fread и fwrite in matlab не точно
После простой пример:
% Number to store
A = 0.123456789101112
% Generate and open txt file
fid = fopen('test_fread.txt','w','b');
% write A into test_fread.txt
fwrite(fid,A,'float32');
% close file
fclose(fid)
% open txt file
fid = fopen('test_fread.txt','r','b');
% read the file
fread(fid,'float32')
ans = 0.123456791043282
Ответ отличается от входного сигнала. Как я могу это исправить? Что я должен искать? Это округление, точность или другая проблема?
32-битные поплавки [имеют только 6-9 десятичных значений точности] (https://en.wikipedia.org/wiki/Single-precision_floating-point_format). Если вам нужна более высокая точность, один вариант состоит в том, чтобы умножить на известную мощность 10 и сохранить значение как целочисленное значение соответствующего размера, с оговоркой, что тип данных по умолчанию MATLAB, 'double' имеет только 15-17 значащих десятичных цифр. – excaza