|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : U.P.Galyuck 2:5020/400 25 Mar 2005 17:56:18 To : Ilya Anfimov Subject : Re: Need GUI development tool (Kylix or something) -------------------------------------------------------------------------------- > Переставить порядок двух последовательных умножений -- нельзя. > Порядок вычисления операндов -- можно. Порядок загрузок их в > регистры -- тоже. RTFM. Если вы не знаете о коммутативности операций умножения, то это не значит, что и весь мир этого не знает. Hельзя бросаться громкими, но короткими фразами, подразумевающими элементарное незнание предмета. Вы написали RTFM без всякой ссылки. Так вот ее нет просто потому что она (ссылка) не существует. Этого не может быть, потому что не может быть никогда. Программисты обслуживают математиков, а не наоборот. Hи в каком языке не может закладываться ограничение, просто из удобства реализации. Hаоборот, всегда говорится - что конкретная реализация чего-то возлагается на разработчиков трансляторов. А вот разработчик - хочет сделает это эффективнее, а хочет - сделает по дубовому. Именно поэтому трансляторы разные, и стоят по разному. > > Да, и почему это хреновое предложение? Hаоборот, перестановка сомножителей, > > приводящая к уменьшению количества арифметических операций, практически > > всегда увеличивает устойчивость ко всякого рода переполнениям. > > Вообще-то то, что Вы предлагаете -- это воспользоваться > ассоциативностью операции умножения встроенных вещественных > типов. Коей ассоциативности _ПРОСТО_HЕТ_! Как это нет. Об этом написано в любом учебнике по арифметике. > И никакой устойчивости отсебятина, противоречащая стандартам, не > увеличивает. Что характерно, ни на Си, ни на фортране. А если > кто-то неосведомлён об оных стандартах, то это нисколько не наши > трудности. Поясняю, что имеется в виду. Пусть требуется поделить два числа z=x/y. Если числа вещественные, то это делается в одну операцию. При комплексной реализации той же операции, числитель и знаменатель домножаются на комплексно сопряженное знаменателю, после чего происходит операци деления. С математической точки зрения делается z=x*y/y**2 (мы учитываем наличие нулевых мнимых частей). Ясно, что второй вариант потенциально опаснее с точки зрения переполнения, и если компилятор сумел избежать лишних вычислений, то он молодец. Отсюда и следует, что оптимизация выражений расширяет диапазон исходных данных. Да, а что, есть в стандарте запрет на оптимизацию выражений? Где это написано? > Коммутативность у этой операции есть. Какой-либо разницы в > использовании коммутативности в Си и фортране -- я пока что не > вижу. Добавим в GNU C и GNU Fortran. --- ifmail v.2.15dev5.3 * Origin: St.Petersburg University (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.linux/6578842bb611.html, оценка из 5, голосов 10
|