Мой скрипт считывает строковое значение «0.001044397222448» из файла, и после синтаксического анализа файла это значение оказывается с двойной точностью:

> format long
> value_double
value_double =
   0.001044397222448

После того, как я преобразую это число в singe, используя value_float = single(value_double), значение будет таким:

> value_float
value_float = 
  0.0010444

Каково реальное значение этой переменной, которую я позже использую в своем Simulink моделировании? Действительно ли оно усечено/округлено до 0,0010444?

Моя проблема в том, что позже, когда я сравниваю это с аналогичным кодом C, я получаю различия.

В коде C значение читается как float gf = 0,001044397222448f; и выводится как «0,001044397242367267608642578125000». Таким образом, код C сохраняет хорошую точность. Но работает ли Matlab?

ПРИМЕЧАНИЕ. 

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

Ответ эксперта

Прашант Кумар ответил. 2021–10–22 06:33:19

Десятичный текст округляется до ближайшего представимого значения

Когда десятичный текст считывается и анализируется MATLAB, компилятором C, вашим собственным специализированным инструментом и т. д., он будет (или должен) отображаться на ближайшее представимое значение типа, которому он будет назначен.

Для типа данных single вот три соседних представляемых значения, показанные точно

Next Rep. Value Above 0.001044397358782589435577392578125
Quantized Value       0.001044397242367267608642578125
Next Rep. Value Below 0.001044397125951945781707763671875

Давайте также покажем идеальные средние точки между этими тремя значениями. (Обратите внимание, что средние точки НЕ представляются в типе.)

Next Rep. Value Above 0.001044397358782589435577392578125
Mid-point Value Above 0.0010443973005749285221099853515625
Quantized Value       0.001044397242367267608642578125
Mid-point Value Below 0.0010443971841596066951751708984375
Next Rep. Value Below 0.001044397125951945781707763671875

Учитывая эти значения, мы можем сказать, находится ли значение десятичного текста, интерпретируемое в мире идеальной математики, в этом диапазоне.

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ