<?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=446685&amp;view=findpost&amp;p=3905787</guid>
        <pubDate>Sun, 16 Jun 2024 16:39:44 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905787</link>
        <description><![CDATA[H g: метод Гаусса-Зейделя подходит, повышает точность.]]></description>
        <author>H g</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905645</guid>
        <pubDate>Wed, 12 Jun 2024 13:49:29 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905645</link>
        <description><![CDATA[H g: Кто-нибудь пробовал GSL ?<br>
<a class='tag-url' href='https://ru.wikipedia.org/wiki/GNU_Scientific_Library' target='_blank'>https://ru.wikipedia.org/wiki/GNU_Scientific_Library</a><br>
<br>
Там по документации есть функция gsl_linalg_HH_solve()<br>
<br>
Документация:<br>
<br>
<a class='tag-url' href='https://www.gnu.org/software/gsl/doc/latex/gsl-ref.pdf' target='_blank'>https://www.gnu.org/software/gsl/doc/latex/gsl-ref.pdf</a>]]></description>
        <author>H g</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905581</guid>
        <pubDate>Tue, 11 Jun 2024 06:26:16 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905581</link>
        <description><![CDATA[H g: Вот конкретный пример, который у меня вызвал трудности.<br>
<span class="b-attach" data-size="10880" data-hits="412" data-attach-id="65980" data-attach-post-id="3905581">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3905581&amp;attach_id=65980' title='Скачать файл' target='_blank'>2024_06_11___002.GIF</a> (, : 412)
		</span><br>
MathCAD как и ожидалось считает Result с большой точностью после запятой<br>
Хотелось бы сделать такую же функцию lsolve(A,B) <br>
моя выдает 9999, ... можно конечно округлить, но где гарантия что для другого случая не затрется нужная цифра.]]></description>
        <author>H g</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905570</guid>
        <pubDate>Mon, 10 Jun 2024 16:19:21 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905570</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Qraizer</strong>, я в той же теме не так же плотно&#33; Надо просто замутить стресс-тесты на числа &quot;до запятой&quot; порядка 5000-7000, и после запятой. Провести деление и умножение е на три. И оценить потом то, что преобразуется.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905555</guid>
        <pubDate>Mon, 10 Jun 2024 13:42:46 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905555</link>
        <description><![CDATA[Qraizer: Нужную точность забыл выставить.<br>
P.S. Я gmp тоже в глаза не видел до этой темы. Сужу исключительно по мануалам. <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="2024-06-10T14:13:21+00:00">10.06.24, 14:13</time></span></span><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">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;iomanip&#62;</div><div class="code_line">#include &#60;boost/multiprecision/cpp_bin_float.hpp&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">namespace bmp = boost::multiprecision;</div><div class="code_line">using longlongFloat = bmp::number&#60;bmp::cpp_bin_float&#60;400&#62;&#62;;</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;longlongFloat a, b, result;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;a = longlongFloat(&quot;234777440777777777777777777777777777777.7324856732495879347856398564739865473986739658739867398657349856734589673463371&quot;);</div><div class="code_line">&nbsp;&nbsp;b = 17.0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;result = a / b;</div><div class="code_line">&nbsp;&nbsp;result*= 17.0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;std::cout &#60;&#60; &quot;Are you fun now, Majestio? &quot; &#60;&#60; std::setprecision(120) &#60;&#60; std::scientific</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;&#60; result &#60;&#60; std::endl;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905554</guid>
        <pubDate>Mon, 10 Jun 2024 13:29:10 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905554</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=446685&view=findpost&p=3905546'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-06-10T12:11:55+00:00">10.06.24, 12:11</time></span><div class='quote '>Ну так ты заюзал целочисленный класс. Юзай вещественный.</div></div><br>
Заюзал, но ... от перемены мест слагаемых - легче не становится&#33;  :lol: <br>
<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">#include &#60;gmp.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpf_t a, b, result;</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpf_init(a);</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpf_init(b);</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpf_init(result);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpf_set_d(a, 234777440777777777777777777777777777777.7324856732495879347856398564739865473986739658739867398657349856734589673463371);</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpf_set_d(b, 17.0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpf_div(result, a, b);</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpf_mul_ui(result, result, 17.0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;gmp_printf(&quot;Qraizer, you should be sad: %.1Ff\n&quot;, result);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpf_clear(a);</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpf_clear(b);</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpf_clear(result);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><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">Qraizer, you should be sad: 234777440777777784841000000000000000000.0</div></ol></div></div></div></div><br>
Не, ну может я где и накосячил - заюзал впервые либу вчера&#33; Но как-то не впечатляет пока  :rolleyes:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905546</guid>
        <pubDate>Mon, 10 Jun 2024 12:11:55 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905546</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=446685&view=findpost&p=3905450'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-06-09T03:06:47+00:00">09.06.24, 03:06</time></span><div class='quote '>И так. Число 10 делим на 3, делим, делим, делим, а потом умножаем на то же 3. Барабаны, фейерверки ... и получаем число 9. Аплодисменты и занавес&#33;</div></div>Ну так ты заюзал целочисленный класс. Юзай вещественный.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905536</guid>
        <pubDate>Mon, 10 Jun 2024 10:29:48 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905536</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=446685&view=findpost&p=3905432'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>H g &#064; <time class="tag-quote__quoted-time" datetime="2024-06-07T21:35:28+00:00">07.06.24, 21:35</time></span><div class='quote '>Вопрос как увеличить точность решения ?</div></div><br>
В таких случаях я всегда пытаюсь преобразовать<br>
формулу вычислений таким образом, чтобы:<br>
1. деление выполнялось один раз и было последним действием.<br>
даже если это приводит к увеличению количества вычислений<br>
2. произвести последнее деление с &quot;правильным&quot; округлением.<br>
---<br>
 Если есть такая возможность, перейти к целым значениям.<br>
Например, если в результате ожидаются дробные миллиметры,<br>
считайте в тысячных долях миллиметров. Главное, чтобы<br>
разрядной сетки целых хватило для всех преобразований.<br>
---<br>
Да, переход к double правильное решение.<br>
Но надо понимать, что использование float/double это<br>
принципиально приближённые вычисления. И если мы начали это<br>
использовать, значит и результат будет приближённый.<br>
Ничего ужасного в этом нет.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905535</guid>
        <pubDate>Mon, 10 Jun 2024 10:27:14 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905535</link>
        <description><![CDATA[H g: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Попробую еще метод Крамера</div></div><br>
Не очень. Если при Гауссе погрешность возникала за счет деления, то в этом методе процесс лезет в область больших чисел. Да и определитель 100 x 100 тоже не подарок. Нужно что то &quot;свое&quot; придумать. Как-то использовать сильную разреженность...]]></description>
        <author>H g</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905530</guid>
        <pubDate>Mon, 10 Jun 2024 09:12:18 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905530</link>
        <description><![CDATA[H g: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=446685&view=findpost&p=3905514'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MBo &#064; <time class="tag-quote__quoted-time" datetime="2024-06-10T09:00:20+00:00">10.06.24, 09:00</time></span><div class='quote '>Итеративные методы пробовали? (например, Гаусса-Зейделя) </div></div><br>
Нет, пока с прямыми &quot;воюю&quot; ))<br>
В моем представлении, если ожидается результат какой-то иррациональный, тогда приближаться к нему нужно с помощью итераций.<br>
У меня же наоборот, результат чаще всего целое число, или уж точно из области рациональных чисел.<br>
Я к итерационным способам отношусь с недоверием. Где гарантия того, что на данных, которые введет пользователь метод не улетит черти зная куда, сложнее проверить.<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="2024-06-10T09:14:50+00:00">10.06.24, 09:14</time></span></span><br>
Смотрю определители, нужные для метода Крамера хорошо считаются когда много нулей ...<br>
Так может и не плохо получится с моим &quot;велосипедом&quot; )]]></description>
        <author>H g</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905514</guid>
        <pubDate>Mon, 10 Jun 2024 09:00:20 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905514</link>
        <description><![CDATA[MBo: <strong class='tag-b'>H g</strong><br>
Итеративные методы пробовали? (например, Гаусса-Зейделя)]]></description>
        <author>MBo</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905513</guid>
        <pubDate>Mon, 10 Jun 2024 08:19:00 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905513</link>
        <description><![CDATA[H g: Попробую еще метод Крамера. Определители находятся путем умножения и сложения, а результат, путем деления, но делается это один раз в конце. Результат можно и округлить до нужного знака, в отличие от метота Гаусса где погрешность накапливается от уравнения к уравнению, и &quot;заползает&quot; на результат. Если одно деление, тогда легко можно определить что 9999,99999 это есть 10000.<br>
<br>
Так как у меня решение СЛАУ требуется исключительно в прикладных целях, наверное, нужно уточнить пределы задачи. Число уравнений (матрица) максимум до 100 x 100, если будет медленно работать - не критично, такой случай маловероятен. Обычно порядка 20 x 20.<br>
Кроме того матрица сильно разреженная. Вот примерно такая, (решение в MathCAD)<br>
<span class="b-attach" data-size="8995" data-hits="551" data-attach-id="65971" data-attach-post-id="3905513">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3905513&amp;attach_id=65971' title='Скачать файл' target='_blank'>2024_06_10___001.GIF</a> (, : 551)
		</span>]]></description>
        <author>H g</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905478</guid>
        <pubDate>Mon, 10 Jun 2024 05:56:00 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905478</link>
        <description><![CDATA[H g: <strong class='tag-b'>Qraizer</strong> Если эта тема больше в &quot;Алгоритмы&quot; подходит, можете перенести туда. Правда активность на форуме не столь велика, поэтому перенос в &quot;Алгоритмы&quot; разве что для порядка. По теме : Направления, в которых можно посмотреть, по советам <strong class='tag-b'>Majestio</strong>, <strong class='tag-b'>amk</strong>, <strong class='tag-b'>Qraizer</strong> я получил. Всем спасибо.]]></description>
        <author>H g</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905474</guid>
        <pubDate>Mon, 10 Jun 2024 00:18:47 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905474</link>
        <description><![CDATA[Majestio: <div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=446685&view=findpost&p=3905468'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-06-09T17:22:53+00:00">09.06.24, 17:22</time></span><div class='quote '>Ребят, ещё немного и в Холивары скину.</div></div><br>
Да пусть тут останется. Тема-то не про алгоритм как таковой, а об обеспечение точности. <br>
А холивара не будет. <strong class='tag-b'>amk</strong>, залетел, дан ценные указания использовать GMP и не &quot;велосипедить&quot;<br>
Но произошел обломчег - его либа после двух действий дает 10 == 9 ...<br>
<span class="b-attach" data-size="12607" data-hits="505" data-attach-id="65969" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=65969' title='Скачать файл' target='_blank'>that_s_fine.jpg</a> (, : 505)
		</span><br>
Вообще не вижу смысла холиварить  :lol: </div></div>]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905472</guid>
        <pubDate>Sun, 09 Jun 2024 17:28:45 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905472</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>H g</strong>, тут тема, как я смотрю, сильно переплетена и с инструментами (сиречь Прочим), и с Алгоритмами. Конкретно по Общим вопросам могу лишь предложить double вместо float, а также соптимизировать расчёты, избавивишись от потери точности, где возможно. (Если что, архитектура x86 и некоторых других умеет отлеживать потерю точности при вычисления и в нужным местах кидать эксепшны или хотя бы отражать факт в статусах. Но могут понадобиться инструменты, например, отладчик.) Типа вычитания близких по величине чисел, сложения малых и больших итп. По другим аспектам... в общем, реши, плз, как лучше: отзеркалить, перенести и куда. <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="2024-06-09T17:35:15+00:00">09.06.24, 17:35</time></span></span><br>
P.S. Могу порекомендовать boost::multiprecision, когда-то был нужен коллеге, я мне было просто интересно повозиться. За производительность не скажу, но 1000-битные и даже -значные мантиссы легко держала. Интерфейс у неё, правда, не столь удобен, как хотелось бы, так что конкуренты в этом плане у неё есть, думаю.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905465</guid>
        <pubDate>Sun, 09 Jun 2024 16:14:45 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905465</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=446685&view=findpost&p=3905458'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2024-06-09T12:13:31+00:00">09.06.24, 12:13</time></span><div class='quote '> Где-нибудь при обработке 20 строки числа перестанут помещаться в отведённые для них ячейки.</div></div><br>
Ты не дочитал мой ответ и давай отвечать ... Но ты не на мой текст отвечаешь, а на то, что ты там сам себе придумал&#33; Какие нафик ячейки?&#33;&#33;&#33; :lol:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905458</guid>
        <pubDate>Sun, 09 Jun 2024 12:13:31 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905458</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=446685&view=findpost&p=3905435'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>H g &#064; <time class="tag-quote__quoted-time" datetime="2024-06-08T06:27:16+00:00">08.06.24, 06:27</time></span><div class='quote '>В целом если умножение/деление будет выполнено на последнем шаге, то все типа /3 и x3 в конце сократятся</div></div> Скорее всего до этого не дойдёт. Где-нибудь при обработке 20 строки числа перестанут помещаться в отведённые для них ячейки. Можно конечно для хранения числителя/знаменателя вместо long int взять long long int = int64_t, тогда это произойдёт попозже, строке так в 40-й.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=446685&view=findpost&p=3905450'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-06-09T03:06:47+00:00">09.06.24, 03:06</time></span><div class='quote '>amk, ты бы лучше не мне советовал как советовать, а посоветовал бы свой совет ТС&#39;у</div></div> Я посоветовал. Воспользоваться не тетрадным вариантом исключения Гаусса, который он реализовал, а нормальным, компьютерным.]]></description>
        <author>amk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905450</guid>
        <pubDate>Sun, 09 Jun 2024 03:06:47 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905450</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=446685&view=findpost&p=3905449'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>amk &#064; <time class="tag-quote__quoted-time" datetime="2024-06-08T20:12:57+00:00">08.06.24, 20:12</time></span><div class='quote '>Majestio, ты бы лучше посоветовал ему не изобретать велосипед, а прикрутить к программе какую-нибудь хорошо отлаженную библиотеку вычислений c повышенной точностью, gmp например.</div></div><br>
<strong class='tag-b'>amk</strong>, ты бы лучше не мне советовал как советовать, а посоветовал бы свой совет ТС&#39;у. А давай ты посоветуешь предложенную тобою либу? Заодно и покажешь ее качество и &quot;невелосипедность&quot; на примерах? А мы проверим. <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="2024-06-09T03:33:03+00:00">09.06.24, 03:33</time></span></span><br>
Хотя ... чего катать вату. Возьмем и <a class='tag-url' href='https://onlinegdb.com/OOSNMH9a_' target='_blank'>накидаем пример</a> деления и последующего умножения на &quot;три&quot;, с использованием библиотеки GMP, очень отлаженной и очень надёжной. Ну и посмотрим качество совета.<br>
<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">#include &#60;stdio.h&#62;</div><div class="code_line">#include &#60;gmp.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">int main(void) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpz_t x, result;</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpz_init_set_str(x, &quot;10&quot;, 10);</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpz_init(result);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Деление на 3</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpz_tdiv_q_ui(x, x, 3);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Умножение на 3</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpz_mul_ui(result, x, 3);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;gmp_printf(&quot;Результат: %Zd\n&quot;, result);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpz_clear(x);</div><div class="code_line">&nbsp;&nbsp; &nbsp;mpz_clear(result);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
И так. Число 10 делим на 3, делим, делим, делим, а потом умножаем на то же 3. Барабаны, фейерверки ... и получаем число 9. Аплодисменты и занавес&#33;  :lol: <br>
<br>
<strong class='tag-b'>amk</strong>, а вывод простой - советовать другим как советовать - это явно не твое&#33; :jokingly:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905449</guid>
        <pubDate>Sat, 08 Jun 2024 20:12:57 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905449</link>
        <description><![CDATA[amk: А я бы посоветовал для начала не сравнивать диагональный элемент с каким-то эпсилон, а всегда искать <strong class='tag-b'>главный</strong> элемент. Достаточно искать по столбцу. Главный - это максимальный по величине (без учёта знака). Своим сравнением с эпсилон ты допускаешь, что коэффициент на который ты умножаешь ведущую строку при исключении переменной из остальных строк может оказываться много больше 1. А на этот коэффициент умножаются не только элементы матрицы, но и их погрешности.<br>
Собственно алгоритмы без выбора главного элемента в программах давно уже не применяются. Они остались только на уроках математики при ручном решении СЛАУ, когда ученик глазами видит, что унего происходит.<br>
<br>
И незачем сравнивать диагональный элемент с единицей - за исключением очень специальных случаев экономия вычислений мизерная, а программа усложняется. Ты пишешь у тебя накапливается погрешность, значит у тебя система уравнений далёка от такого специального случая.<br>
<br>
<strong class='tag-b'>Majestio</strong>, ты бы лучше посоветовал ему не изобретать велосипед, а прикрутить к программе какую-нибудь хорошо отлаженную библиотеку вычислений c повышенной точностью, gmp например.]]></description>
        <author>amk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905435</guid>
        <pubDate>Sat, 08 Jun 2024 06:27:16 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905435</link>
        <description><![CDATA[H g: <strong class='tag-b'>Majestio</strong> Спасибо за подробный ответ.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>не работайте с десятичными дробями, работайте со смешанными дробями</div></div> В этом что-то есть, хорошая мысль. В целом если умножение/деление будет выполнено на последнем шаге, то все типа /3 и x3 в конце сократятся. Нужно подумать как реализовать.]]></description>
        <author>H g</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905434</guid>
        <pubDate>Sat, 08 Jun 2024 02:22:58 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905434</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=446685&view=findpost&p=3905432'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>H g &#064; <time class="tag-quote__quoted-time" datetime="2024-06-07T21:35:28+00:00">07.06.24, 21:35</time></span><div class='quote '>Вопрос как увеличить точность решения ?</div></div><br>
Интересный вопрос. Я когда-то им задавался, но не было прикладной задачи - и так руки и не дошли.<br>
<br>
Тем не менее, поделюсь своими соображениями ...<br>
<br>
Сперва немного рассуждений. Классический пример, приведенный выше (деление, а потом умножение на три), показывает, прямо тыкает носом в то, что использование <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">float</span></span> и <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">double</span></span> - тупиковый метод. Возникает законный вопрос, ачо делать-та? И тут возникает ответ: не работайте с десятичными дробями, работайте со смешанными дробями&#33; Естественно, это нужно реализовывать самому (ну или поискать в сети, может уже кто удосужился).<br>
<br>
Т.е. любое число у нас представляется примерно следующим образом:<br>
<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">class BigDecimal {</div><div class="code_line">&nbsp;&nbsp;string WholePart; &nbsp; // целая часть</div><div class="code_line">&nbsp;&nbsp;string Numerator; &nbsp; // числитель</div><div class="code_line">&nbsp;&nbsp;string Denominator; // знаменатель</div><div class="code_line">}</div></ol></div></div></div></div><br>
Ну и далее реализация кучи публичных методов и перегрузок операций. Сразу возникает законный вопрос &quot;WTF strings?&quot;. Рассказываю, может непоследовательно, но тезисно и с душой  :lol: <br>
<ol class="tag-list" type="1"><li>В своей реализации вообще-то <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">BigDecimal</span></span> мы должны задействовать какую-либо реализацию <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">BigInt</span></span>. Я <a class='tag-url' href='https://github.com/panks/BigInteger/tree/master' target='_blank'>встречал простейшие реализации</a> бигинтов на строках. Возможно эти части и следовало бы объявлять не строками, а сразу большими целыми, но не суть...</li><li>В процессе арифметических операций у нас <strong class='tag-b'>вообще ничего не теряется <span class="tag-color tag-color-named" data-value="red" style="color: red"><sup class='tag-sup'>*</sup></span></strong>, Но за это нужно платить быстро растущими размерами всех полей <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">BigDecimal</span></span>, равно как и значительным снижением скорости вычислений</li><li>В результате нас практически перестает беспокоить потеря точности, но начинает серьёзно напрягать проблема потери производительности и потребления ресурсов</li><li>Поэтому, время от времени, по реализованной нами, вернее вами, стратегии, <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">BigDecimal</span></span> должен производить нормализацию своих данных путем поиска НОД числителя и знаменателя, и сокращать их на этот НОД</li><li>Ну и второй вариант - если нормализации явно недостаточно и данные все равно слишком большие, должна быть разработана стратегия управления уменьшением точности - сокращением числителя и знаменателя (одного из) делением на какое-то серьёзное целое нацело, а второго из ... с потерями. Но когда это касается, к примеру 30 000-й цифры после запятой, потери точности буду едва заметны. В любом случае для решения мелких и средних задач по вычислениям хватит и решения из п.4.</li><li>И конечно последний шаг - уже после всех вычислений мы можем спокойно вызвать метод, который из <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">BigDecimal</span></span> нам вернет <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">float</span></span> или <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">double</span></span></li></ol><span class="tag-color tag-color-named" data-value="red" style="color: red"><sup class='tag-sup'>*</sup></span> с учетом п.5<br>
<br>
<strong class='tag-b'><span class='tag-size' data-value='14' style='font-size:14pt;'>Как резюме</span></strong><br>
<br>
В такой реализации мы сохраняли все что можно в процессе вычислений, платили мучительными секундами ожидания и повышения температуры центрального процессора, но получили на выходе максимально возможный по точности результат во <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">float</span></span> или <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">double</span></span>. <br>
<br>
Перед реализацией своего <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">BigDecimal</span></span> нужно очень внимательно выбирать либу <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">BigInt</span></span>, т.к. реализация на строках последней - не лучший вариант. Чуйка подсказывает, что на битовых массивах будет получше.<br>
<br>
Ну и последнее. Ложечка дегтя в вашу баночку с вашим мёдом. Ясный перец, что речь идет только об элементарных арифметических операциях. В <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">BigDecimal</span></span> мы не сможем хранить иррациональные числа, не сможем обеспечивать 100% точность при извлечении корней, вычислении логарифмов &amp; etc. Жизнь - боль&#33;]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905432</guid>
        <pubDate>Fri, 07 Jun 2024 21:35:28 +0000</pubDate>
        <title>Точность вычислений. Метод Гаусса</title>
        <link>https://forum.sources.ru/index.php?showtopic=446685&amp;view=findpost&amp;p=3905432</link>
        <description><![CDATA[H g: Есть у меня система линейных алгебраических уравнений<br>
<br>
a11x1 + a12x2 + a13x3 + ... a1NxN = b1 <br>
a21x1 + a22x2 + a23x3 + ... a2NxN = b2 <br>
a31x1 + a32x2 + a33x3 + ... a3NxN = b3 <br>
... <br>
aN1x1 + aN2x2 + aN3x3 + ... aNNxN = bN<br>
<br>
Получаю марицы a[][], b[], x[]. Решаю с помощью метода Гаусса.<br>
Все работает, но есть одна проблема: накапливается погрешность и в итоге вместо точного ответа в 10000, имею 9999,<br>
<br>
Код привожу, но он возможно требует пояснений, так как вырван из контекста<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><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">void CalculateMatrixSolve()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int i, j, k, n, p, r;</div><div class="code_line">&nbsp;&nbsp; &nbsp;float a[100][100];</div><div class="code_line">&nbsp;&nbsp; &nbsp;float b[100];</div><div class="code_line">&nbsp;&nbsp; &nbsp;float x[100];</div><div class="code_line">&nbsp;&nbsp; &nbsp;float temp, eps;</div><div class="code_line">&nbsp;&nbsp; &nbsp;n = e::calculatematrixubound; // число уравнений</div><div class="code_line">&nbsp;&nbsp; &nbsp;eps = 0.0000001f;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (i=0; i&#60;e::calculatematrixshift; i++) // это по сути обертка - внешние исходные данные, типа расчет выполнить i раз с разными входными данными. </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// переменная i в самом алгоритме не используется</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (j=0; j&#60;n; j++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (k=0; k&#60;n; k++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a[j][k] = e::calculatematrixa[i][j][k]; // входная матрица A[j][k] </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b[j] = e::calculatematrixb[i][j]; // входная матрица B[j]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;x[j] = 0.0f;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (j=0; j&#60;n; j++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (a[j][j] == 1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (r=j+1; r&#60;n; r++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (fabs(a[r][j]) &#62;= eps)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;temp = a[r][j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (p=j; p&#60;n; p++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a[r][p] -= (a[j][p] * temp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b[r] -= (b[j] * temp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (fabs(a[j][j]) &#60; eps)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (r=j+1; r&#60;n; r++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (fabs(a[r][j]) &#62;= eps)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (p=j; p&#60;n; p++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;temp = a[j][p];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a[j][p] = a[r][p];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a[r][p] = temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;temp = b[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b[j] = b[r];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b[r] = temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (fabs(a[j][j]) &#62;= eps)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;temp = a[j][j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (p=j; p&#60;n; p++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a[j][p] /= temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b[j] /= temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (r=j+1; r&#60;n; r++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (a[r][j] != 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;temp = a[r][j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (p=j; p&#60;n; p++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a[r][p] -= (a[j][p] * temp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b[r] -= (b[j] * temp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;temp = a[j][j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (p=j; p&#60;n; p++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a[j][p] /= temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b[j] /= temp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (r=j+1; r&#60;n; r++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (a[r][j] != 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;temp = a[r][j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (p=j; p&#60;n; p++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a[r][p] -= (a[j][p] * temp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b[r] -= (b[j] * temp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (j=(n-1); j&#62;=0; j--)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;x[j] = b[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (p=0; p&#60;j; p++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b[p] -= (a[p][j] * x[j]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (j=0; j&#60;n; j++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;e::calculatematrixx[i][j] = x[j]; // выходная матрица X[j] результат</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div></div></div><br>
Здесь есть некоторая погрешность (eps), потому что сам метод предполагает деление, чтобы получилась &quot;треугольная&quot; матрица. Так вот, если делитель будет например 3, то 1.0/3.0 = 0.3333... значит деление не может быть выполнено точно и дальше накапливается погрешность. Попробовал поменять (eps) но было еще хуже, при чем при увеличении числа знаков после запятой функция решает неправильно. Путем практики подобрал (eps = 0.0000001f;)<br>
// Если 1.0/3.0 полчим 0.333333, а если потом 0.333333 умножить на 3.0 то получим 0.999999 а не 1.0<br>
// В этом мне кажется загвоздка<br>
<br>
Вопрос как увеличить точность решения ?<br>
Предполагаемые варианты:<br>
1) заменить float на double, поможет ли это<br>
2) использовать другой метод не Гаусса, тогда какой..<br>
<br>
Может что-нибудь посоветуете ?]]></description>
        <author>H g</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	