<?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=396944&amp;view=findpost&amp;p=3549340</guid>
        <pubDate>Fri, 28 Nov 2014 14:42:29 +0000</pubDate>
        <title>Алгоритм ф-и RND - конгруэнтный генератор (КГ)</title>
        <link>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549340</link>
        <description><![CDATA[TheTrik: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=396944&view=findpost&p=3549333'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>BlackSun &#064; <time class="tag-quote__quoted-time" datetime="2014-11-28T17:13:23+03:00">28.11.14, 14:13</time></span><div class='quote '>так у меня знак не имеет значения, 1140671485 вмещается в Long.</div></div><br>
Причем здесь 1140671485? Метод в статье - неверный, я же написал.<br>
Смотри мою формулу, которую я привел в 6-м посте. Представь у тебя <strong class='tag-b'>OldVal</strong> будет равно к примеру &amp;HFFFFFF&amp; - что будет?<br>
Насчет инициализации генератора, там тоже не все так просто. Переданное число конвертируется в 64-разрядное с плавающей точкой, из него берется 4 верхних байта и перетасовываются. Вот небольшой пример:<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">Option Explicit</div><div class="code_line">&nbsp;</div><div class="code_line">Private Type INT64</div><div class="code_line">&nbsp;&nbsp; &nbsp;l As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;h As Long</div><div class="code_line">End Type</div><div class="code_line">Private Type CUR</div><div class="code_line">&nbsp;&nbsp; &nbsp;v As Currency</div><div class="code_line">End Type</div><div class="code_line">Private Type DBL</div><div class="code_line">&nbsp;&nbsp; &nbsp;d As Double</div><div class="code_line">End Type</div><div class="code_line">&nbsp;</div><div class="code_line">Dim oldVal As INT64</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub Form_Load()</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim Seed As Long, i As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;InitMyRnd</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Debug.Print &quot;Pass 1:&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;For i = 0 To 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Debug.Print Rnd</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Debug.Print MyRnd</div><div class="code_line">&nbsp;&nbsp; &nbsp;Next</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Randomize 500</div><div class="code_line">&nbsp;&nbsp; &nbsp;MyRandomize 500</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Debug.Print &quot;Pass 2:&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;For i = 0 To 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Debug.Print Rnd</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Debug.Print MyRnd</div><div class="code_line">&nbsp;&nbsp; &nbsp;Next</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Sub</div><div class="code_line">&nbsp;</div><div class="code_line">Private Function MyRnd() As Single</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim c As CUR</div><div class="code_line">&nbsp;&nbsp; &nbsp;c.v = 429101.0243@ - (CCur(oldVal.l / 10000) * 179203@)</div><div class="code_line">&nbsp;&nbsp; &nbsp;LSet oldVal = c: oldVal.l = (oldVal.l And &amp;HFFFFFF)</div><div class="code_line">&nbsp;&nbsp; &nbsp;MyRnd = oldVal.l / &amp;H1000000</div><div class="code_line">End Function</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub MyRandomize(ByVal Seed As Long)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim r As DBL, l As INT64</div><div class="code_line">&nbsp;&nbsp; &nbsp;r.d = CDbl(Seed)</div><div class="code_line">&nbsp;&nbsp; &nbsp;LSet l = r</div><div class="code_line">&nbsp;&nbsp; &nbsp;oldVal.l = ((l.h \ &amp;H100) And &amp;HFFFF00) Xor ((l.h And &amp;HFFFF&amp;) * &amp;H100) Or (oldVal.l And &amp;HFF0000FF)</div><div class="code_line">End Sub</div><div class="code_line">Private Sub InitMyRnd()</div><div class="code_line">&nbsp;&nbsp; &nbsp;oldVal.l = 327680</div><div class="code_line">End Sub</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>TheTrik</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549333</guid>
        <pubDate>Fri, 28 Nov 2014 14:13:23 +0000</pubDate>
        <title>Алгоритм ф-и RND - конгруэнтный генератор (КГ)</title>
        <link>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549333</link>
        <description><![CDATA[BlackSun: так у меня знак не имеет значения, 1140671485 вмещается в Long. <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="2014-11-28T14:13:57+00:00">28.11.14, 14:13</time></span></span><br>
вернее знаковый бит не используется.]]></description>
        <author>BlackSun</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549329</guid>
        <pubDate>Fri, 28 Nov 2014 14:02:02 +0000</pubDate>
        <title>Алгоритм ф-и RND - конгруэнтный генератор (КГ)</title>
        <link>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549329</link>
        <description><![CDATA[TheTrik: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=396944&view=findpost&p=3549326'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>BlackSun &#064; <time class="tag-quote__quoted-time" datetime="2014-11-28T13:57:04+00:00">28.11.14, 13:57</time></span><div class='quote '>объясни плиз, что ты намудрил, что от этого изменилось?</div></div><br>
Ты код смотрел вообще? Запускал? Не видишь что изменилось?<br>
Это тот же конгруэнтный метод, только коэффициенты другие, но они по прежнему должны быть беззнаковыми.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>NewVal = 0xFFC39EC3 - (OldVal * 0x2BC03)</div></div> <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="2014-11-28T14:02:47+00:00">28.11.14, 14:02</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=396944&view=findpost&p=3549326'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>BlackSun &#064; <time class="tag-quote__quoted-time" datetime="2014-11-28T13:57:04+00:00">28.11.14, 13:57</time></span><div class='quote '>оказывается, при Seed=0 результат аналогичный, а вот при Seed&gt;0 уже не тот... Значит, Seed используется не так как я представляю в коде, а как-то иначе?</div></div><br>
Код смотри, Seed - начальное значение генератора, у меня оно всегда 0 (смотри первый вызов функции чему равно i.l?), можешь делать какое хочешь.]]></description>
        <author>TheTrik</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549326</guid>
        <pubDate>Fri, 28 Nov 2014 13:57:04 +0000</pubDate>
        <title>Алгоритм ф-и RND - конгруэнтный генератор (КГ)</title>
        <link>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549326</link>
        <description><![CDATA[BlackSun: объясни плиз, что ты намудрил, что от этого изменилось? <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="2014-11-28T13:58:26+00:00">28.11.14, 13:58</time></span></span><br>
оказывается, при Seed=0 результат аналогичный, а вот при Seed&gt;0 уже не тот... Значит, Seed используется не так как я представляю в коде, а как-то иначе?]]></description>
        <author>BlackSun</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549318</guid>
        <pubDate>Fri, 28 Nov 2014 13:33:06 +0000</pubDate>
        <title>Алгоритм ф-и RND - конгруэнтный генератор (КГ)</title>
        <link>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549318</link>
        <description><![CDATA[TheTrik: <strong class='tag-b'>BlackSun</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">Option Explicit</div><div class="code_line">&nbsp;</div><div class="code_line">Private Type INT64</div><div class="code_line">&nbsp;&nbsp; &nbsp;l As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;h As Long</div><div class="code_line">End Type</div><div class="code_line">Private Type CUR</div><div class="code_line">&nbsp;&nbsp; &nbsp;v As Currency</div><div class="code_line">End Type</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub Form_Load()</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim Seed As Long, i As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Seed = 0</div><div class="code_line">&nbsp;&nbsp; &nbsp;Randomize Seed</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;For i = 0 To 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Debug.Print Rnd</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Debug.Print MyRnd</div><div class="code_line">&nbsp;&nbsp; &nbsp;Next</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Sub</div><div class="code_line">&nbsp;</div><div class="code_line">Private Function MyRnd() As Single</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim c As CUR</div><div class="code_line">&nbsp;&nbsp; &nbsp;Static i As INT64</div><div class="code_line">&nbsp;&nbsp; &nbsp;c.v = 429101.0243@ - (CCur(i.l / 10000) * 179203@)</div><div class="code_line">&nbsp;&nbsp; &nbsp;LSet i = c: i.l = (i.l And &amp;HFFFFFF)</div><div class="code_line">&nbsp;&nbsp; &nbsp;MyRnd = i.l / &amp;H1000000</div><div class="code_line">End Function</div></ol></div></div></div></div>]]></description>
        <author>TheTrik</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549272</guid>
        <pubDate>Fri, 28 Nov 2014 11:46:54 +0000</pubDate>
        <title>Алгоритм ф-и RND - конгруэнтный генератор (КГ)</title>
        <link>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549272</link>
        <description><![CDATA[BlackSun: не вижу тут влияние знака, по крайней мере в данном примере...]]></description>
        <author>BlackSun</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549223</guid>
        <pubDate>Fri, 28 Nov 2014 09:14:08 +0000</pubDate>
        <title>Алгоритм ф-и RND - конгруэнтный генератор (КГ)</title>
        <link>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549223</link>
        <description><![CDATA[TheTrik: <a class='tag-url' href='http://support.microsoft.com/kb/231847' target='_blank'>http://support.microsoft.com/kb/231847</a><br>
В VB6 нет беззнаковой арифметики, можно через API функций вычислить.]]></description>
        <author>TheTrik</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549168</guid>
        <pubDate>Fri, 28 Nov 2014 01:16:57 +0000</pubDate>
        <title>Алгоритм ф-и RND - конгруэнтный генератор (КГ)</title>
        <link>https://forum.sources.ru/index.php?showtopic=396944&amp;view=findpost&amp;p=3549168</link>
        <description><![CDATA[BlackSun: Нашёл в инете инфу про параметры КГ (k(i)=(a*k(i-1) + c) mod m) для RND VB6:<br>
a=1140671485 <br>
c=12820163<br>
m=2^24<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">Dim lM As Long, Seed As Single, i As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;lM = 2 ^ 24</div><div class="code_line">&nbsp;&nbsp; &nbsp;Seed = 1</div><div class="code_line">&nbsp;&nbsp; &nbsp;Randomize Seed</div><div class="code_line">Debug.Print Rnd</div><div class="code_line">Debug.Print ((1140671485 * Seed + 12820163) And (lM - 1)) / lM</div></ol></div></div></div></div><br>
<br>
не сходится... может, при преобразовании в вещественное деление происходит не на 2^24, а на другое число?]]></description>
        <author>BlackSun</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	