Страница 2 из 3

Re: Написать функцию, которая принимает в качестве параметров два указателя на массив

Добавлено: 21 окт 2015, 14:50
Romeo
Ты очень много написал, но по теме возникшего спора, как всегда, не сказал ровным счётом ничего. Я так и не понял, чем лучше твоя замена, чем вызов стандартной функции. Только тем, что имя стандартной функции необходимо вспомнить? Смешной аргумент...

Или может читабельностью или краткостью записи лучше? Ну-ка сравни:

Код: Выделить всё

if (((sx<0.0)&&(sy<0.0)&&(sx>sy))||((sx>=0.0)&&(sy<0.0)&&(sx<-sy))||((sx<0.0)&&(sy>=0.0)&&(sy>-sx))

Код: Выделить всё

if (fabs(sx) < fabs(sy))
Какой вариант ты бы предпочёл увидеть, если бы читал чужой код?
Сионист писал(а):Ога. Конвейер уже алгоритмы портит. Не смешно.
Кривые руки и изобретение велосипеда портит алгоритм, а не конвейер...

Re: Написать функцию, которая принимает в качестве параметров два указателя на массив

Добавлено: 22 окт 2015, 17:01
Сионист
Как раз по-Вашему выходит, что этим занимается конвейер, а не кривые руки.

Re: Написать функцию, которая принимает в качестве параметров два указателя на массив

Добавлено: 22 окт 2015, 17:22
Romeo
Одно другому не мешает.

Re: Написать функцию, которая принимает в качестве параметров два указателя на массив

Добавлено: 22 окт 2015, 17:23
Сионист
Это только в том случае, если кривыми руками писать компилятор.

Re: Написать функцию, которая принимает в качестве параметров два указателя на массив

Добавлено: 22 окт 2015, 17:33
Romeo
Нет, это в том случае, когда кривыми руками начинают переписывать функции из стандартной библиотеки...

Re: Написать функцию, которая принимает в качестве параметров два указателя на массив

Добавлено: 22 окт 2015, 19:34
Сионист
Romeo писал(а):Нет, это в том случае, когда кривыми руками начинают переписывать функции из стандартной библиотеки...
А ничего, что в

Код: Выделить всё

double abs(double x)
{
 if (x<0.0)
 {
  return -x;
 }
 return x;
}
алгоритм с библиотечному как раз эквивалентен, а отличается реализация? Да и сложно здесь напутать. А вот если кривые руки поработали на этапе разработки компилятора, то грамотное написание прикладного кода уже не поможет, кривой компилятор алгоритмы переврёт и хоть один кол на системнике теши, хоть целый частокол. И только в этом случае возможно влияние по вине кривых рук на алгоритм именно копвейера. Ну можно ещё в порядке полного бреда предположить, что то же самое возможно в случае, когда кривые руки поработали над проектом процессора. Только такой он до конечного юзверя не дойдёт.

Re: Написать функцию, которая принимает в качестве параметров два указателя на массив

Добавлено: 22 окт 2015, 20:58
Romeo
Да при чём тут компилятор и кривость рук тех, кто его пишет? Зачем ты это всё строчишь? Сколько же можно флудить не по теме?

Вопрос был совсем в другом. Использовать или не использовать библиотечные функции. Ответ только один - использовать обязательно. Причин несколько:

1. Переиспозование кода. Знакомый термин?
2. Переносимость кода. Этот пункт нуждается в дополнительных комментариях?
3. Оптимизация кода. В правильных компиляторах библиотечные функции оптимизированы и написаны вообще на ассемблере, так что они будут заведомо быстрее кустарного самописа.

Я всегда думал, что всё это должен понимать даже джуниор разработчик. Ошибался. Разработчик разработчику рознь, оказывается.

Re: Написать функцию, которая принимает в качестве параметров два указателя на массив

Добавлено: 25 окт 2015, 10:31
Сионист
1. Знакомый. А как на счёт имени с префиксом? Перегрузку придумали, чтоб избавиться именно от них. Здесь же проще запомнить, а то и пересочинить код, чем вспомнить префикс.
2. Иф переносим не в меньшей мере.
3.1. Даже оптимизируя, эффективней потратить усилия на то, что работает хотябы 20% времени, чем не вспоминать префикс функции, работающей менее процента времени, а то и миллионную его долю. Вот если бы вычисление модулей элементов массива, тогда другое дело. А так хоть в миллиард раз ускоряй, выиграешь меньше процента, да и то только если в замен не накосячишь в другом месте, так как суммарные усилия на оптимизацию даже такой простой прожки не так уж и безграничны. А накосячив, целиком пессимизируешь.
3.2. Задача - даже не выбрать массив с меньшим модулем среднего арифметического, а изучить связку фо+иф и научиться программировать смешанные алгоритмы.

Re: Написать функцию, которая принимает в качестве параметров два указателя на массив

Добавлено: 25 окт 2015, 22:03
Romeo
Вот когда тебе удобно, ты любишь абстрагироваться, а когда абстракция необходима - наоборот изо всех сил цепляешься за частности.

Всё, что я написал, я писал в принципе об использовании стандартных функций, а не не о конкретном случае. Мне показалось, что это понятно. В общем, можешь выкидывать свой предыдущий пост.

И подчеркну ещё раз. Аргумент о том, что проще написать самому, чем "вспомнить" название стандартной функции, достоин разве что студентика, пишущего очередную лабораторку, а не опытного программиста. Так что перестань уже писать такие мерзости. Кстати, ровно, как и аргумент о том, что однократная оптимизация не стоит выеденного яйца. Хороший программист должен писать всегда оптимально, а не только тогда, когда код вызывается много раз в цикле.

Re: Написать функцию, которая принимает в качестве параметров два указателя на массив

Добавлено: 02 ноя 2015, 13:08
Сионист
Romeo писал(а):Всё, что я написал, я писал в принципе об использовании стандартных функций, а не не о конкретном случае. Мне показалось, что это понятно. В общем, можешь выкидывать свой предыдущий пост.
Вот только фраза об их ненужности с самого начала была именно частной. И мне казалось, что понятно как раз это.
Кстати, ровно, как и аргумент о том, что однократная оптимизация не стоит выеденного яйца.
Ну где у меня хоть слово об однократности? Речь о разумном подходе к оптимизации, а тот самый студентик тотальную оптимизацию не потянет. Кстати, если уж так нужно, то что опытному мешает в перегруженную инкладо-функцию завернуть тот самый fabs и таскать её за всеми модулями?