<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Integer Overflow vorbeugen]]></title><description><![CDATA[<p>Servus,</p>
<p>ich habe eine Funktion, in der die Werte schon nach oben gehen können. Mit meiner Erfahrung in Java dachte ich an den Typen 'BigInt' statt int. Wie würdet ihr das in C++ machen und mit welchen Werten würdet ihr testen, ob das auch klappt? Danke vorab.</p>
<pre><code class="language-cpp">/**
     * Methode berechnet die Konserviertheit eines Strings. 
     * Dabei werden zuerst das Auftreten eines Symbols im String summiert. Dann 
     * wird das relative Auftreten ermittelt. Dann wird dieser Wert etwa 0.3 quadriert.
     * Durch das Quadrieren wirken sich konservierte Symbole besonders intensiv auf den 
     * Score aus. Für einen String werden alle Symbolscores summiert.
     * 
     * @param colStringToScore
     * @return 
     */
    double computeConservationScoreOfString( seqan::CharString colStringToScore ){

        double score = 0.0;
        int numberOfSymbols = seqan::length( colStringToScore );
        string curAlphabetSymbolString;
        string curCharString;
        int matches = 0;

        for ( int i = 0; i &lt; global::g_aminoAlphabet.size(); i++ ){ // gehe das Alphabet ab

            curAlphabetSymbolString = global::g_aminoAlphabet.at( i );
            matches = 0;

            // Lauf den String für dieses Symbol ab
            for ( int j = 0; j &lt; numberOfSymbols; j++ ){
                curCharString = &quot;&quot;;

                char curChar = colStringToScore[j];
                curCharString = curChar;

                if ( curAlphabetSymbolString == curCharString )
                {
                    matches++;
                }
                else {}
            } // Ende für dieses Symbol, Matches sind ermittelt

            double squareMatches = matches * matches; // Quadrieren der matches
            double symbolRelativeScore = squareMatches / (numberOfSymbols * numberOfSymbols);
            score = score + symbolRelativeScore;
        } // Ende für alle Symbole

        return score;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/288673/integer-overflow-vorbeugen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 19:41:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288673.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Jun 2011 18:55:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Integer Overflow vorbeugen on Mon, 20 Jun 2011 18:55:13 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich habe eine Funktion, in der die Werte schon nach oben gehen können. Mit meiner Erfahrung in Java dachte ich an den Typen 'BigInt' statt int. Wie würdet ihr das in C++ machen und mit welchen Werten würdet ihr testen, ob das auch klappt? Danke vorab.</p>
<pre><code class="language-cpp">/**
     * Methode berechnet die Konserviertheit eines Strings. 
     * Dabei werden zuerst das Auftreten eines Symbols im String summiert. Dann 
     * wird das relative Auftreten ermittelt. Dann wird dieser Wert etwa 0.3 quadriert.
     * Durch das Quadrieren wirken sich konservierte Symbole besonders intensiv auf den 
     * Score aus. Für einen String werden alle Symbolscores summiert.
     * 
     * @param colStringToScore
     * @return 
     */
    double computeConservationScoreOfString( seqan::CharString colStringToScore ){

        double score = 0.0;
        int numberOfSymbols = seqan::length( colStringToScore );
        string curAlphabetSymbolString;
        string curCharString;
        int matches = 0;

        for ( int i = 0; i &lt; global::g_aminoAlphabet.size(); i++ ){ // gehe das Alphabet ab

            curAlphabetSymbolString = global::g_aminoAlphabet.at( i );
            matches = 0;

            // Lauf den String für dieses Symbol ab
            for ( int j = 0; j &lt; numberOfSymbols; j++ ){
                curCharString = &quot;&quot;;

                char curChar = colStringToScore[j];
                curCharString = curChar;

                if ( curAlphabetSymbolString == curCharString )
                {
                    matches++;
                }
                else {}
            } // Ende für dieses Symbol, Matches sind ermittelt

            double squareMatches = matches * matches; // Quadrieren der matches
            double symbolRelativeScore = squareMatches / (numberOfSymbols * numberOfSymbols);
            score = score + symbolRelativeScore;
        } // Ende für alle Symbole

        return score;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2081326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081326</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Mon, 20 Jun 2011 18:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to Integer Overflow vorbeugen on Mon, 20 Jun 2011 19:01:23 GMT]]></title><description><![CDATA[<p>Wo ist diese kritische Grösse und was ist <code>seqan</code> ? Und wieso hast du einen leeren <code>else</code> -Block?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081329</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Mon, 20 Jun 2011 19:01:23 GMT</pubDate></item><item><title><![CDATA[Reply to Integer Overflow vorbeugen on Mon, 20 Jun 2011 19:01:54 GMT]]></title><description><![CDATA[<p>Nur mal zur Abschätzung: Mit welchen Datenmengen rechnest du, daß du dir Gedanken über Overflows machst? Um einen normalgroßen int aus dem Gleichgewicht zu bringen, mußt du schon mehr als 46000 gleiche Zeichen in der Eingabe haben.</p>
<p>(Ansonsten gibt es auch schnellere Möglichkeiten zu zählen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081330</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 20 Jun 2011 19:01:54 GMT</pubDate></item><item><title><![CDATA[Reply to Integer Overflow vorbeugen on Mon, 20 Jun 2011 19:34:20 GMT]]></title><description><![CDATA[<p>Es geht darum, dass ich eine Zahl quadriere, das ist die kritische Größe in Zeile 39. Ich würde gerne wissen wie groß die Zahl werden darf, dass diese mir beim Quadrieren keinen Overflow verursacht? Da würde ich dann vorher eine if-Abfrage einbauen, ob der Wert kleiner als der Grenzwert ist, der gerade noch quadriert werden kann.</p>
<p>seqan::length() liefert mir einfach die Länge eines Strings, der ist einige Male bei meinen Testdaten schon 2000 Zeichen lang. Da das Programm auch andere dann nutzen, kann ich schwer einschätzen, ob da einer einen String mit wasweissichwieviel Zeichen reinschickt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081347</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Mon, 20 Jun 2011 19:34:20 GMT</pubDate></item><item><title><![CDATA[Reply to Integer Overflow vorbeugen on Mon, 20 Jun 2011 19:38:06 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if(matches &gt; std::sqrt(numeric_limits&lt;int&gt;::max())
{
  //zu gross
}
</code></pre>
<p>Aber das ist keine schöne Lösung. <code>mathes</code> sollte <code>unsigned</code> sein. Und wieso nutzt du nicht die STD?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2081349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2081349</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Mon, 20 Jun 2011 19:38:06 GMT</pubDate></item></channel></rss>