<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3816211</guid>
        <pubDate>Thu, 05 Dec 2019 03:24:44 +0000</pubDate>
        <title>На чистейшем СИ создать МАКРО возведение в степень</title>
        <link>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3816211</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416381&view=findpost&p=3816210'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2019-12-05T03:56:37+03:00">05.12.19, 00:56</time></span><div class='quote '>скорее всего, именно это и есть лучший вариант реализации</div></div>Вот только он бессмысленный. Ты вряд ли что-то выиграешь, а в общем случае можешь и проиграть.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3816210</guid>
        <pubDate>Thu, 05 Dec 2019 00:56:37 +0000</pubDate>
        <title>На чистейшем СИ создать МАКРО возведение в степень</title>
        <link>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3816210</link>
        <description><![CDATA[FasterHarder: <strong class='tag-b'>Qraizer</strong>ну, спс. за такой ответ) круто&#33; даже слишком круто&#33;)<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416381&view=findpost&p=3816133'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2019-12-04T03:56:30+00:00">04.12.19, 03:56</time></span><div class='quote '>Чем тебе не такое, например</div></div><br>
скорее всего, именно это и есть лучший вариант реализации]]></description>
        <author>FasterHarder</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3816133</guid>
        <pubDate>Wed, 04 Dec 2019 03:56:30 +0000</pubDate>
        <title>На чистейшем СИ создать МАКРО возведение в степень</title>
        <link>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3816133</link>
        <description><![CDATA[Qraizer: Если я тебе скажу, что библиотеки C в Visual Studio 2017, а может и более ранних, целиком написаны на C++, ты поверишь? Вообще же, конкретно тут – скорее всего нет. extern &quot;C++&quot; означает связывание языка C++, которое Стандартом языка C не определяется. Даже такой формат extern, с указанием типа связывания, в C отсутствует. (Впрочем, не исключено, что я отстал от жизни, и в новых ратификациях оно уже есть.) Хотя возможно, что это расширение Стандарта языка в некой конкретной реализации. Каком-нибудь там порте GCC.<br>
Но в C++ такой формат есть изначально, и там определены два типа связывания: &quot;C&quot; и &quot;C++&quot;. Конкретные реализации могут предлагать и другие, например &quot;Pascal&quot;, &quot;Fortran&quot; итп. Тип связывания указывает компилятору, на каком языке написана эта функция, а значит соглашения этого языка об именованиях функций, способов их вызова и передачи параметров должны известны компилятору, и он должен применять к ней их. Тоже может быть применено и к переменным. Формально тип связывания должен быть указан для каждого имени функции и переменной, но в Стандарте C++ сказано, что если явно ничего не задано, должно применяться &quot;C++&quot;. Так что если бы вон та первая строка отсутствовала, смысл был бы тем же самым. В режиме компиляции C++, конечно.<br>
Если код рассчитан на оба языка, то естественно в режиме компиляции C без этой строки применялись бы правила &quot;C&quot;. Если код уже откомпилирован и лежит в объектном файле, то это может повлечь невозможность сборки приложения, т.к. линкер просто не найдёт нужных имён. Обычно в подобных случаях это обходят условной компиляцией, только делают наоборот:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#ifdef __cplusplus</div><div class="code_line">&nbsp;</div><div class="code_line">/* тут код C++ */</div><div class="code_line">extern &quot;C&quot;</div><div class="code_line">{</div><div class="code_line">&nbsp;</div><div class="code_line">#else</div><div class="code_line">&nbsp;</div><div class="code_line">/* тут код C */</div><div class="code_line">typedef _Bool bool;</div><div class="code_line">&nbsp;</div><div class="code_line">#endif</div><div class="code_line">&nbsp;</div><div class="code_line">/* тут общий код */</div><div class="code_line">bool func(int);</div><div class="code_line">&nbsp;</div><div class="code_line">#ifdef __cplusplus</div><div class="code_line">}</div><div class="code_line">#endif</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>Макрос __cplusplus определён в Стандарте C++ и отсутствует в Стандарте C. Так что в любом режиме компиляции этот код снабдит компиляторы правильной инфой. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-12-04T04:04:02+00:00">04.12.19, 04:04</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416381&view=findpost&p=3816131'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2019-12-03T22:21:20+00:00">03.12.19, 22:21</time></span><div class='quote '>кстати, залез ради интереса внутрь &lt;math.h&gt; и там даже через директивы мутят:<br>
...</div></div>Конкретно тут реализация одна, а остальные сводятся к ней. Вероятно нет никакой выгоды от сокращения точности вычислений, тип машинных данных всегда один и тот же, как например на FPU какого-нибудь x86, где все вычисления выполняются в 80-битном формате. Другое дело, если за дело возьмётся оптимизатор под SSE. Там для 32-х и 64-битных вещественных разница-таки есть и немалая. Ну и платформ с отличной от свойств x86 архитектурой хватает, всякие ARMы, например. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-12-04T04:08:47+00:00">04.12.19, 04:08</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416381&view=findpost&p=3816131'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2019-12-03T22:21:20+00:00">03.12.19, 22:21</time></span><div class='quote '>в заголовочном файле &lt;math.h&gt; встретился такой код:</div></div>За C не помню, что там с разными Стандартами, но в C++ перегрузка для целочисленной степени всегда была. Подразумевается, что реализация этой функции не будет использовать неточные и непроизводительные трансцендентные команды или численные методы, а реализует эффективный итерационный алгоритм возведения в квадрат с накоплением поправочных сомножителей. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-12-04T04:16:06+00:00">04.12.19, 04:16</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416381&view=findpost&p=3816131'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2019-12-03T22:21:20+00:00">03.12.19, 22:21</time></span><div class='quote '>в общем я понял, что макросом такое НЕ сделать даже физически</div></div>Ну почему же. Любой фрагмент кода, не пересекающего границы блока, можно завернуть в макрос. Вопрос в целесообразности. Ты ж не ответил, какого эффекта хочешь добиться. Чем тебе не такое, например:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#define POW(x, y) (exp((y)*log(x)))</div></ol></div></div></div></div>но что-то мне подсказывает, это не то, о чём бы ты стал не спрашивать.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3816131</guid>
        <pubDate>Tue, 03 Dec 2019 22:21:20 +0000</pubDate>
        <title>На чистейшем СИ создать МАКРО возведение в степень</title>
        <link>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3816131</link>
        <description><![CDATA[FasterHarder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416381&view=findpost&p=3816008'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2019-12-02T12:37:09+00:00">02.12.19, 12:37</time></span><div class='quote '>В Cях разные функции.</div></div><br>
кстати, залез ради интереса внутрь &lt;math.h&gt; и там даже через директивы мутят:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#define powl(x,y) &nbsp; &nbsp; &nbsp; ((long double)pow((double)(x), (double)(y)))</div><div class="code_line">#define powf(x,y) &nbsp; ((float)pow((double)(x), (double)(y)))</div></ol></div></div></div></div><br>
<br>
т е в основе лежит вызов просто <strong class='tag-b'><em class='tag-i'>pow</em></strong>, а, используя приведения типов, выводят на нужную точность, ну, ок)<br>
<br>
в общем я понял, что макросом такое НЕ сделать даже физически, ну, ок)<br>
<br>
<strong class='tag-b'>Qraizer</strong>, кстати в заголовочном файле &lt;math.h&gt; встретился такой код:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">extern &quot;C++&quot; {</div><div class="code_line">&nbsp;</div><div class="code_line">template&#60;class _Ty&#62; inline</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;_Ty _Pow_int(_Ty _X, int _Y)</div><div class="code_line">....</div></ol></div></div></div></div><br>
<br>
так это чего получается, что некоторые фрагменты &quot;библиотеки&quot; СИ написаны на С++?? это норм.? или я совсем чего-то не понимаю)]]></description>
        <author>FasterHarder</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3816008</guid>
        <pubDate>Mon, 02 Dec 2019 12:37:09 +0000</pubDate>
        <title>На чистейшем СИ создать МАКРО возведение в степень</title>
        <link>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3816008</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416381&view=findpost&p=3815935'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>FasterHarder &#064; <time class="tag-quote__quoted-time" datetime="2019-11-30T17:18:29+00:00">30.11.19, 17:18</time></span><div class='quote '>... насколько помню pow имеет кучу перегрузок.</div></div>Ну это в Плюсах перегрузки. В Cях разные функции.<br>
Перегрузки там не спроста. Они по-разному реализуют алгоритм, г.о. оптимизируя его под разные типы. Где нужна большая точность, там больше итераций, где не нужна, нечего лишние биты рассчитывать. Для целочисленного показателя трансцендентные операции вообще не используются. Если ты предполагаешь, что макросом сэкономишь накладные расходы посредством встраивания кода, боюсь разочаровать, избыточные или неэффективные операции сожрут весь профит от встраивания и добавят от себя приличный такой оверхед.<br>
<br>
<br>
]]></description>
        <author>Qraizer</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3815989</guid>
        <pubDate>Mon, 02 Dec 2019 04:54:01 +0000</pubDate>
        <title>На чистейшем СИ создать МАКРО возведение в степень</title>
        <link>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3815989</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>FasterHarder</strong>, ты хочешь <a class='tag-url' href='https://repo.or.cz/glibc.git/blob/HEAD:/sysdeps/ieee754/dbl-64/e_pow.c' target='_blank'>решить это</a> макросом&#33;<br>
Решением &quot;в лоб&quot; считаю нереальным. Я бы посмотрел в сторону приближенного вычисления, <a class='tag-url' href='https://dxdy.ru/topic103221.html' target='_blank'>вот интересная тема</a>. Тут скорее в математику нужно лезть с головой, чем программировать.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3815951</guid>
        <pubDate>Sat, 30 Nov 2019 19:31:38 +0000</pubDate>
        <title>На чистейшем СИ создать МАКРО возведение в степень</title>
        <link>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3815951</link>
        <description><![CDATA[Славян: Очевидно, что возможность есть. Число=степень можно тупо макросом разложить на биты, а там уже сверхдлинным макросом собрать результат. ;)<br><br>Для начала, расскажите как будете в степень 1/2 макросом возводить? :D]]></description>
        <author>Славян</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3815935</guid>
        <pubDate>Sat, 30 Nov 2019 17:18:29 +0000</pubDate>
        <title>На чистейшем СИ создать МАКРО возведение в степень</title>
        <link>https://forum.sources.ru/index.php?showtopic=416381&amp;view=findpost&amp;p=3815935</link>
        <description><![CDATA[FasterHarder: Всем хай&#33; Прямо сходу залетаем в дело&#33;<br>
<br>
Есть ли возможность средствами языка чистейшего СИ (АНСИ стандарт / С89) создать макрос, имитирующий выполнение функции <strong class='tag-b'><em class='tag-i'>pow</em></strong>(основание; степень)??<br>
Скажу честно, что кроме <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#define описание константы</div></ol></div></div></div></div> в си практически ничего не использую.<br>
<br>
насколько помню <strong class='tag-b'><em class='tag-i'>pow</em></strong> имеет кучу перегрузок. В идеале МАКРО должен тоже их поддерживать (с точки зрения функциональности), если это НЕВОЗМОЖНО, то хотя бы максимум функционала взять от <strong class='tag-b'><em class='tag-i'>pow</em></strong>.<br>
<br>
Подскажите как быть-то...<br>
<br>
ЗЫ: я хорошо понимаю, как соорудить МАКРО возводящий тупо в квадрат или куб, а вот чтоб произвольное в произвольную степень...хм...]]></description>
        <author>FasterHarder</author>
        <category>C/C++: Прочее</category>
      </item>
	
      </channel>
      </rss>
	