2014-02-16 6 views
1

Я не ожидал, что результат 1-х:целочисленное деление с помощью ilnumerics

ILArray<int> test = ILMath.ones<int>(20, 20); 
test = test/2; 

Я думал, что результат будет 0-х. Если ILNumerics использует библиотеку Intel IPP, то я считаю, что 1 - результат, который будет возвращать библиотеке IPP для целочисленного деления. Если это дизайн, то я предполагаю, что мой лучший вариант должен был бы использовать что-то вроде этого, чтобы получить результат целочисленного деления:

test = toint32(tosingle(test)/2.0f); 

Любые комментарии? Вопросов? Указатели RTFM? Эрик

ответ

0

ILNumerics прилипает к тем же конвенциям целого деления, как Matlab (и по-видимому IPP?) Делает: он не обрежет дробную часть результата, но раундов это (от нуля в середине) и насыщает его в границы типа данных.

Лично я не очень доволен этим - он вырос из ранних устремлений в отношении совместимости. Хотя насыщение является хорошим и соответствует интуиции, округление, очевидно, конфликтует с тем, как .NET (и все основные языки общего назначения) обрабатывают целочисленное деление, просто обрезая дробную часть. Вы можете проголосовать за изменения в поведении здесь: http://ilnumerics.net/mantis/view.php?id=188

Для того, чтобы получить «/ .NET-конвенционные C» Результаты, вы можете использовать функцию ILMath.apply в качестве замены:

ILArray<int> a = 1, b = 2; 
ILArray<int> c = a/b; //gives 1 
c = ILMath.apply((_a,_b) => _a/_b, a, b); // gives 0 

 Смежные вопросы

  • Нет связанных вопросов^_^