What is the theory behind seeding a CRC?












0












$begingroup$


The basic CRC check is a polynomial division in this form:



$$
Q(x)Gen(x) + Rem(x) = frac {x^nMsg(x) } { Gen(x) }
$$



It's recommended that the polynomial is seeded so that an all-zero message does not result in an all-zero checksum too.



As far as I can tell, with a seed the polynomial division equation becomes:



$$
Q(x)Gen(x) + Rem(x) = frac {x^{2n}Seed(x) + x^nMsg(x) } { Gen(x) }
$$



But if the message Msg(x) is zero, then is there not a case that the generator polynomial could be a factor of the scaled seed, and we get a zero remainded Rem(x)?










share|cite|improve this question









$endgroup$

















    0












    $begingroup$


    The basic CRC check is a polynomial division in this form:



    $$
    Q(x)Gen(x) + Rem(x) = frac {x^nMsg(x) } { Gen(x) }
    $$



    It's recommended that the polynomial is seeded so that an all-zero message does not result in an all-zero checksum too.



    As far as I can tell, with a seed the polynomial division equation becomes:



    $$
    Q(x)Gen(x) + Rem(x) = frac {x^{2n}Seed(x) + x^nMsg(x) } { Gen(x) }
    $$



    But if the message Msg(x) is zero, then is there not a case that the generator polynomial could be a factor of the scaled seed, and we get a zero remainded Rem(x)?










    share|cite|improve this question









    $endgroup$















      0












      0








      0





      $begingroup$


      The basic CRC check is a polynomial division in this form:



      $$
      Q(x)Gen(x) + Rem(x) = frac {x^nMsg(x) } { Gen(x) }
      $$



      It's recommended that the polynomial is seeded so that an all-zero message does not result in an all-zero checksum too.



      As far as I can tell, with a seed the polynomial division equation becomes:



      $$
      Q(x)Gen(x) + Rem(x) = frac {x^{2n}Seed(x) + x^nMsg(x) } { Gen(x) }
      $$



      But if the message Msg(x) is zero, then is there not a case that the generator polynomial could be a factor of the scaled seed, and we get a zero remainded Rem(x)?










      share|cite|improve this question









      $endgroup$




      The basic CRC check is a polynomial division in this form:



      $$
      Q(x)Gen(x) + Rem(x) = frac {x^nMsg(x) } { Gen(x) }
      $$



      It's recommended that the polynomial is seeded so that an all-zero message does not result in an all-zero checksum too.



      As far as I can tell, with a seed the polynomial division equation becomes:



      $$
      Q(x)Gen(x) + Rem(x) = frac {x^{2n}Seed(x) + x^nMsg(x) } { Gen(x) }
      $$



      But if the message Msg(x) is zero, then is there not a case that the generator polynomial could be a factor of the scaled seed, and we get a zero remainded Rem(x)?







      coding-theory






      share|cite|improve this question













      share|cite|improve this question











      share|cite|improve this question




      share|cite|improve this question










      asked Jan 18 at 1:02









      MartyMarty

      1012




      1012






















          1 Answer
          1






          active

          oldest

          votes


















          3












          $begingroup$

          The OP's "equations"are not quite right. If the data that is to be transmitted is represented by $d(x)$ and the CRC polynomial is $C(x)$ of degree $n$, then the no bells and whistles CRC algorithm divides $x^nd(x)$ by $C(x)$ to produce a quotient polynomial $q(x)$ and a remainder polynomial $r(x)$ of degree smaller than $n$, the degree of $C(x)$. The CRC checksum is $r(x)$. The equation describing the relationship is
          $$x^nd(x) = q(x)C(x) + r(x)tag{1}$$
          and not what the OP has written. Now from $(1)$, we get that
          $$q(x)C(x) = x^nd(x) - r(x) = x^nd(x) + r(x)tag{2}$$
          where the second equality is using the fact that in the binary field, addition and subtraction are the same operation. Thus, $x^nd(x) + r(x)$ is a multiple of the CRC polynomial $C(x)$. What is transmitted is $x^nd(x) + r(x)$. But notice that the coefficients of $x^0, x, x^2, ldots, x^{n-1}$ in $x^nd(x)$ all are $0$ while $r(x)$ is of degree $n-1$ or less, and so we see that what is actually transmitted is the data bits (the $x^nd(x)$ part) followed by the CRC checksum $r(x)$: the trailing $n$ zeroes in $x^nd(x)$ have been neatly filled in by the CRC checksum.



          Now, if $d(x)$, the data to be transmitted, is a long string of zeroes, then $(1)$ and $(2)$ show that the CRC checksum is a string is $n$ zeroes, and so the entire transmission is a long string of zeroes. This is deemed to be unsuitable for a variety of reasons, and there are various bells and whistles versions of the CRC computation that avoid the possibility that a transmission consists entirely of zeros. One of these bells and whistles versions prepends a nonzero header to the data to be transmitted (the header is discarded at the receiver). Thus, if we have $M$ bits of data (and so $d(x)$ is of degree $M-1$) and the header $h(x)$ is $m$ bits in length, then what gets divided by $C(x)$ is not $x^nd(x)$ but instead $x^{m+M+n}h(x) + x^nd(x)$ which stream of bits is the header $h(x)$ followed by the data string $d(x)$ followed $n$ zeroes. What gets sent out over the channel (or recorded in memory or disk or flash drive) is $x^{m+M+n}h(x) + x^nd(x) + hat{r}(x)$ where $hat{r}(x)$ is the remainder when $x^{m+M+n}h(x) + x^nd(x)$ is divided by $C(x)$; it is different from the remainder when $x^nd(x)$ is divided by $C(x)$. In particular, even if $d(x)$ is a stream of zeroes, $hat{r}(x)$ is nonzero (unless the system designer not thought through the problem and has chosen $h(x)$ to be $C(x)$ itself (or a polynomial multiple of $C(x)$ which should be a fireable offense!) The CRC checksum being all zeroes is not an issue now even if $d(x)$ is all zeroes: the header and CRC checksum are nonzero. Another alternative is to simply complement the first two data bytes (used if $C(x)$ has degree 16) or four data data bytes (if $C(x)$ has degree 32) before passing them to the division circuit that computes the remainder from the division of $x^nd(x)$. The receiver must, if curse, remember to undo the complementation suffered by the leading data bytes at the transmitter. This method does not increase the transmission length but has the obvious disadvantage that if the data happens to be the size of the US national debt (a number in the trillions with a large number of trailing zeros), complementation of the leading bytes at the transmitter might modify the transmitted data stream to be all zeroes!






          share|cite|improve this answer











          $endgroup$













          • $begingroup$
            Thanks for taking the time to answer, Dilip! But my question is how is the seed value folded into the equations? The seed isn't normally transmitted as part of the message - it's agreed between the rx and tx up-front. I just don't know how it works in the maths...
            $endgroup$
            – Marty
            Jan 19 at 17:17














          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "69"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          noCode: true, onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3077723%2fwhat-is-the-theory-behind-seeding-a-crc%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          3












          $begingroup$

          The OP's "equations"are not quite right. If the data that is to be transmitted is represented by $d(x)$ and the CRC polynomial is $C(x)$ of degree $n$, then the no bells and whistles CRC algorithm divides $x^nd(x)$ by $C(x)$ to produce a quotient polynomial $q(x)$ and a remainder polynomial $r(x)$ of degree smaller than $n$, the degree of $C(x)$. The CRC checksum is $r(x)$. The equation describing the relationship is
          $$x^nd(x) = q(x)C(x) + r(x)tag{1}$$
          and not what the OP has written. Now from $(1)$, we get that
          $$q(x)C(x) = x^nd(x) - r(x) = x^nd(x) + r(x)tag{2}$$
          where the second equality is using the fact that in the binary field, addition and subtraction are the same operation. Thus, $x^nd(x) + r(x)$ is a multiple of the CRC polynomial $C(x)$. What is transmitted is $x^nd(x) + r(x)$. But notice that the coefficients of $x^0, x, x^2, ldots, x^{n-1}$ in $x^nd(x)$ all are $0$ while $r(x)$ is of degree $n-1$ or less, and so we see that what is actually transmitted is the data bits (the $x^nd(x)$ part) followed by the CRC checksum $r(x)$: the trailing $n$ zeroes in $x^nd(x)$ have been neatly filled in by the CRC checksum.



          Now, if $d(x)$, the data to be transmitted, is a long string of zeroes, then $(1)$ and $(2)$ show that the CRC checksum is a string is $n$ zeroes, and so the entire transmission is a long string of zeroes. This is deemed to be unsuitable for a variety of reasons, and there are various bells and whistles versions of the CRC computation that avoid the possibility that a transmission consists entirely of zeros. One of these bells and whistles versions prepends a nonzero header to the data to be transmitted (the header is discarded at the receiver). Thus, if we have $M$ bits of data (and so $d(x)$ is of degree $M-1$) and the header $h(x)$ is $m$ bits in length, then what gets divided by $C(x)$ is not $x^nd(x)$ but instead $x^{m+M+n}h(x) + x^nd(x)$ which stream of bits is the header $h(x)$ followed by the data string $d(x)$ followed $n$ zeroes. What gets sent out over the channel (or recorded in memory or disk or flash drive) is $x^{m+M+n}h(x) + x^nd(x) + hat{r}(x)$ where $hat{r}(x)$ is the remainder when $x^{m+M+n}h(x) + x^nd(x)$ is divided by $C(x)$; it is different from the remainder when $x^nd(x)$ is divided by $C(x)$. In particular, even if $d(x)$ is a stream of zeroes, $hat{r}(x)$ is nonzero (unless the system designer not thought through the problem and has chosen $h(x)$ to be $C(x)$ itself (or a polynomial multiple of $C(x)$ which should be a fireable offense!) The CRC checksum being all zeroes is not an issue now even if $d(x)$ is all zeroes: the header and CRC checksum are nonzero. Another alternative is to simply complement the first two data bytes (used if $C(x)$ has degree 16) or four data data bytes (if $C(x)$ has degree 32) before passing them to the division circuit that computes the remainder from the division of $x^nd(x)$. The receiver must, if curse, remember to undo the complementation suffered by the leading data bytes at the transmitter. This method does not increase the transmission length but has the obvious disadvantage that if the data happens to be the size of the US national debt (a number in the trillions with a large number of trailing zeros), complementation of the leading bytes at the transmitter might modify the transmitted data stream to be all zeroes!






          share|cite|improve this answer











          $endgroup$













          • $begingroup$
            Thanks for taking the time to answer, Dilip! But my question is how is the seed value folded into the equations? The seed isn't normally transmitted as part of the message - it's agreed between the rx and tx up-front. I just don't know how it works in the maths...
            $endgroup$
            – Marty
            Jan 19 at 17:17


















          3












          $begingroup$

          The OP's "equations"are not quite right. If the data that is to be transmitted is represented by $d(x)$ and the CRC polynomial is $C(x)$ of degree $n$, then the no bells and whistles CRC algorithm divides $x^nd(x)$ by $C(x)$ to produce a quotient polynomial $q(x)$ and a remainder polynomial $r(x)$ of degree smaller than $n$, the degree of $C(x)$. The CRC checksum is $r(x)$. The equation describing the relationship is
          $$x^nd(x) = q(x)C(x) + r(x)tag{1}$$
          and not what the OP has written. Now from $(1)$, we get that
          $$q(x)C(x) = x^nd(x) - r(x) = x^nd(x) + r(x)tag{2}$$
          where the second equality is using the fact that in the binary field, addition and subtraction are the same operation. Thus, $x^nd(x) + r(x)$ is a multiple of the CRC polynomial $C(x)$. What is transmitted is $x^nd(x) + r(x)$. But notice that the coefficients of $x^0, x, x^2, ldots, x^{n-1}$ in $x^nd(x)$ all are $0$ while $r(x)$ is of degree $n-1$ or less, and so we see that what is actually transmitted is the data bits (the $x^nd(x)$ part) followed by the CRC checksum $r(x)$: the trailing $n$ zeroes in $x^nd(x)$ have been neatly filled in by the CRC checksum.



          Now, if $d(x)$, the data to be transmitted, is a long string of zeroes, then $(1)$ and $(2)$ show that the CRC checksum is a string is $n$ zeroes, and so the entire transmission is a long string of zeroes. This is deemed to be unsuitable for a variety of reasons, and there are various bells and whistles versions of the CRC computation that avoid the possibility that a transmission consists entirely of zeros. One of these bells and whistles versions prepends a nonzero header to the data to be transmitted (the header is discarded at the receiver). Thus, if we have $M$ bits of data (and so $d(x)$ is of degree $M-1$) and the header $h(x)$ is $m$ bits in length, then what gets divided by $C(x)$ is not $x^nd(x)$ but instead $x^{m+M+n}h(x) + x^nd(x)$ which stream of bits is the header $h(x)$ followed by the data string $d(x)$ followed $n$ zeroes. What gets sent out over the channel (or recorded in memory or disk or flash drive) is $x^{m+M+n}h(x) + x^nd(x) + hat{r}(x)$ where $hat{r}(x)$ is the remainder when $x^{m+M+n}h(x) + x^nd(x)$ is divided by $C(x)$; it is different from the remainder when $x^nd(x)$ is divided by $C(x)$. In particular, even if $d(x)$ is a stream of zeroes, $hat{r}(x)$ is nonzero (unless the system designer not thought through the problem and has chosen $h(x)$ to be $C(x)$ itself (or a polynomial multiple of $C(x)$ which should be a fireable offense!) The CRC checksum being all zeroes is not an issue now even if $d(x)$ is all zeroes: the header and CRC checksum are nonzero. Another alternative is to simply complement the first two data bytes (used if $C(x)$ has degree 16) or four data data bytes (if $C(x)$ has degree 32) before passing them to the division circuit that computes the remainder from the division of $x^nd(x)$. The receiver must, if curse, remember to undo the complementation suffered by the leading data bytes at the transmitter. This method does not increase the transmission length but has the obvious disadvantage that if the data happens to be the size of the US national debt (a number in the trillions with a large number of trailing zeros), complementation of the leading bytes at the transmitter might modify the transmitted data stream to be all zeroes!






          share|cite|improve this answer











          $endgroup$













          • $begingroup$
            Thanks for taking the time to answer, Dilip! But my question is how is the seed value folded into the equations? The seed isn't normally transmitted as part of the message - it's agreed between the rx and tx up-front. I just don't know how it works in the maths...
            $endgroup$
            – Marty
            Jan 19 at 17:17
















          3












          3








          3





          $begingroup$

          The OP's "equations"are not quite right. If the data that is to be transmitted is represented by $d(x)$ and the CRC polynomial is $C(x)$ of degree $n$, then the no bells and whistles CRC algorithm divides $x^nd(x)$ by $C(x)$ to produce a quotient polynomial $q(x)$ and a remainder polynomial $r(x)$ of degree smaller than $n$, the degree of $C(x)$. The CRC checksum is $r(x)$. The equation describing the relationship is
          $$x^nd(x) = q(x)C(x) + r(x)tag{1}$$
          and not what the OP has written. Now from $(1)$, we get that
          $$q(x)C(x) = x^nd(x) - r(x) = x^nd(x) + r(x)tag{2}$$
          where the second equality is using the fact that in the binary field, addition and subtraction are the same operation. Thus, $x^nd(x) + r(x)$ is a multiple of the CRC polynomial $C(x)$. What is transmitted is $x^nd(x) + r(x)$. But notice that the coefficients of $x^0, x, x^2, ldots, x^{n-1}$ in $x^nd(x)$ all are $0$ while $r(x)$ is of degree $n-1$ or less, and so we see that what is actually transmitted is the data bits (the $x^nd(x)$ part) followed by the CRC checksum $r(x)$: the trailing $n$ zeroes in $x^nd(x)$ have been neatly filled in by the CRC checksum.



          Now, if $d(x)$, the data to be transmitted, is a long string of zeroes, then $(1)$ and $(2)$ show that the CRC checksum is a string is $n$ zeroes, and so the entire transmission is a long string of zeroes. This is deemed to be unsuitable for a variety of reasons, and there are various bells and whistles versions of the CRC computation that avoid the possibility that a transmission consists entirely of zeros. One of these bells and whistles versions prepends a nonzero header to the data to be transmitted (the header is discarded at the receiver). Thus, if we have $M$ bits of data (and so $d(x)$ is of degree $M-1$) and the header $h(x)$ is $m$ bits in length, then what gets divided by $C(x)$ is not $x^nd(x)$ but instead $x^{m+M+n}h(x) + x^nd(x)$ which stream of bits is the header $h(x)$ followed by the data string $d(x)$ followed $n$ zeroes. What gets sent out over the channel (or recorded in memory or disk or flash drive) is $x^{m+M+n}h(x) + x^nd(x) + hat{r}(x)$ where $hat{r}(x)$ is the remainder when $x^{m+M+n}h(x) + x^nd(x)$ is divided by $C(x)$; it is different from the remainder when $x^nd(x)$ is divided by $C(x)$. In particular, even if $d(x)$ is a stream of zeroes, $hat{r}(x)$ is nonzero (unless the system designer not thought through the problem and has chosen $h(x)$ to be $C(x)$ itself (or a polynomial multiple of $C(x)$ which should be a fireable offense!) The CRC checksum being all zeroes is not an issue now even if $d(x)$ is all zeroes: the header and CRC checksum are nonzero. Another alternative is to simply complement the first two data bytes (used if $C(x)$ has degree 16) or four data data bytes (if $C(x)$ has degree 32) before passing them to the division circuit that computes the remainder from the division of $x^nd(x)$. The receiver must, if curse, remember to undo the complementation suffered by the leading data bytes at the transmitter. This method does not increase the transmission length but has the obvious disadvantage that if the data happens to be the size of the US national debt (a number in the trillions with a large number of trailing zeros), complementation of the leading bytes at the transmitter might modify the transmitted data stream to be all zeroes!






          share|cite|improve this answer











          $endgroup$



          The OP's "equations"are not quite right. If the data that is to be transmitted is represented by $d(x)$ and the CRC polynomial is $C(x)$ of degree $n$, then the no bells and whistles CRC algorithm divides $x^nd(x)$ by $C(x)$ to produce a quotient polynomial $q(x)$ and a remainder polynomial $r(x)$ of degree smaller than $n$, the degree of $C(x)$. The CRC checksum is $r(x)$. The equation describing the relationship is
          $$x^nd(x) = q(x)C(x) + r(x)tag{1}$$
          and not what the OP has written. Now from $(1)$, we get that
          $$q(x)C(x) = x^nd(x) - r(x) = x^nd(x) + r(x)tag{2}$$
          where the second equality is using the fact that in the binary field, addition and subtraction are the same operation. Thus, $x^nd(x) + r(x)$ is a multiple of the CRC polynomial $C(x)$. What is transmitted is $x^nd(x) + r(x)$. But notice that the coefficients of $x^0, x, x^2, ldots, x^{n-1}$ in $x^nd(x)$ all are $0$ while $r(x)$ is of degree $n-1$ or less, and so we see that what is actually transmitted is the data bits (the $x^nd(x)$ part) followed by the CRC checksum $r(x)$: the trailing $n$ zeroes in $x^nd(x)$ have been neatly filled in by the CRC checksum.



          Now, if $d(x)$, the data to be transmitted, is a long string of zeroes, then $(1)$ and $(2)$ show that the CRC checksum is a string is $n$ zeroes, and so the entire transmission is a long string of zeroes. This is deemed to be unsuitable for a variety of reasons, and there are various bells and whistles versions of the CRC computation that avoid the possibility that a transmission consists entirely of zeros. One of these bells and whistles versions prepends a nonzero header to the data to be transmitted (the header is discarded at the receiver). Thus, if we have $M$ bits of data (and so $d(x)$ is of degree $M-1$) and the header $h(x)$ is $m$ bits in length, then what gets divided by $C(x)$ is not $x^nd(x)$ but instead $x^{m+M+n}h(x) + x^nd(x)$ which stream of bits is the header $h(x)$ followed by the data string $d(x)$ followed $n$ zeroes. What gets sent out over the channel (or recorded in memory or disk or flash drive) is $x^{m+M+n}h(x) + x^nd(x) + hat{r}(x)$ where $hat{r}(x)$ is the remainder when $x^{m+M+n}h(x) + x^nd(x)$ is divided by $C(x)$; it is different from the remainder when $x^nd(x)$ is divided by $C(x)$. In particular, even if $d(x)$ is a stream of zeroes, $hat{r}(x)$ is nonzero (unless the system designer not thought through the problem and has chosen $h(x)$ to be $C(x)$ itself (or a polynomial multiple of $C(x)$ which should be a fireable offense!) The CRC checksum being all zeroes is not an issue now even if $d(x)$ is all zeroes: the header and CRC checksum are nonzero. Another alternative is to simply complement the first two data bytes (used if $C(x)$ has degree 16) or four data data bytes (if $C(x)$ has degree 32) before passing them to the division circuit that computes the remainder from the division of $x^nd(x)$. The receiver must, if curse, remember to undo the complementation suffered by the leading data bytes at the transmitter. This method does not increase the transmission length but has the obvious disadvantage that if the data happens to be the size of the US national debt (a number in the trillions with a large number of trailing zeros), complementation of the leading bytes at the transmitter might modify the transmitted data stream to be all zeroes!







          share|cite|improve this answer














          share|cite|improve this answer



          share|cite|improve this answer








          edited Jan 19 at 18:34

























          answered Jan 19 at 4:29









          Dilip SarwateDilip Sarwate

          19.5k13078




          19.5k13078












          • $begingroup$
            Thanks for taking the time to answer, Dilip! But my question is how is the seed value folded into the equations? The seed isn't normally transmitted as part of the message - it's agreed between the rx and tx up-front. I just don't know how it works in the maths...
            $endgroup$
            – Marty
            Jan 19 at 17:17




















          • $begingroup$
            Thanks for taking the time to answer, Dilip! But my question is how is the seed value folded into the equations? The seed isn't normally transmitted as part of the message - it's agreed between the rx and tx up-front. I just don't know how it works in the maths...
            $endgroup$
            – Marty
            Jan 19 at 17:17


















          $begingroup$
          Thanks for taking the time to answer, Dilip! But my question is how is the seed value folded into the equations? The seed isn't normally transmitted as part of the message - it's agreed between the rx and tx up-front. I just don't know how it works in the maths...
          $endgroup$
          – Marty
          Jan 19 at 17:17






          $begingroup$
          Thanks for taking the time to answer, Dilip! But my question is how is the seed value folded into the equations? The seed isn't normally transmitted as part of the message - it's agreed between the rx and tx up-front. I just don't know how it works in the maths...
          $endgroup$
          – Marty
          Jan 19 at 17:17




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Mathematics Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f3077723%2fwhat-is-the-theory-behind-seeding-a-crc%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Human spaceflight

          Can not write log (Is /dev/pts mounted?) - openpty in Ubuntu-on-Windows?

          File:DeusFollowingSea.jpg