Подразделение MATLAB... должно ли 29/128 возвращать 0?
Я действительно не думаю, что это проблема точности, ответ должен быть около 0,226. Вот точный код:
val = I(i,j)
bucketSize
pos = val / bucketSize
I
это просто матрица, из которой я беру значения. Вот вывод из MATLAB:
val =
29
bucketSize =
128
pos =
0
Что мне не хватает?
4 ответа
Я думаю, что ваша матрица I
это данные пикселей, загруженные из файла изображения, которые будут иметь значения, которые обычно являются 8-разрядными целыми числами без знака. Как уже упоминалось, преобразование обоих целочисленных значений в значение двойной точности гарантирует, что MATLAB выполняет деление с плавающей запятой вместо целочисленного деления (что округлит результат).
Преобразование одного значения в двойную точность недостаточно:
Для всех двоичных операций, в которых один операнд является массивом целочисленного типа данных (кроме 64-разрядных целых чисел), а другой - скалярным двойным, MATLAB вычисляет операцию с использованием поэлементной арифметики двойной точности, а затем преобразует результат обратно в исходный целочисленный тип данных.
Если вы хотите узнать больше о различных числовых типах данных в MATLAB, вы можете ознакомиться с этой документацией.
Я понял, проблема в том, что моя матрица по какой-то причине содержала уинт8, а не удваивается. Просто изменил val=I(i,j) на val=double( I(i,j)) и все хорошо. Благодарю.
Эти переменные, вероятно, являются целыми числами, а не двойными или длинными. 1/2 возвращает.5? Работают ли другие операции?