<?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[Mit sehr großen Werten rechnen]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem. Ich &quot;spiele&quot; gerade auf <a href="http://enigmagroup.org" rel="nofollow">enigmagroup.org</a> die JavaScript Missionen und bin inzwischen bei der letzten angekommen.<br />
Das Passwort berechnet sich dabei aus dem aktuellen Jahr, man kommt also nur weiter wenn man sich zufällig gerade in diesem Jahr befindet oder das gesuchte Jahr herausfindet und es der URL anhängt. Hier der Code:</p>
<pre><code>date = new Date();
year = date.getYear();
pass = 1337;

for(i = 1; i &lt;= year; i++){
  pass += year * i * year;
}

if(pass == 318338237039211050000){
  alert(&quot;Good job!&quot;);
  window.location.href = year + &quot;.php&quot;;
}
else{
  alert(&quot;Sorry, did you fail already?!&quot;);
  window.location.href = &quot;./index.php&quot;;
}
</code></pre>
<p>Ich habe nun versucht mit diesem Code eine Lösung in C++ zu schreiben und bin daran gescheitert.<br />
Ich habe einfach die Jahre hochgezählt und immer pass berechnet und dann mit der langen Zahl (wie in der Routine) verglichen.<br />
Das Problem ist jedoch (und das ist mir erst ziemlich spät eingefallen), dass die Zahl für jeden Datentyp zu groß ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
<p>Ich dachte mir dann, ich könnte die Zahl einfach durch z.B. 1.000.000 dividieren und die restlichen Zahlen als Nachkommestellen mitführen.<br />
Allerdings kommt dabei folgendes raus:</p>
<pre><code>double test=31833823703921106.0000;
printf (&quot;%f&quot;, test);
</code></pre>
<p>Ausgabe:</p>
<pre><code>31833823703921104.000000
</code></pre>
<p>Wie wird denn aus der ...6,0... eine ...4,0... ?<br />
Hat irgendjmd eine Idee wie ich mein Problem lösen könnte?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324654/mit-sehr-großen-werten-rechnen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 06:16:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324654.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 25 Mar 2014 22:00:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mit sehr großen Werten rechnen on Tue, 25 Mar 2014 22:00:19 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem. Ich &quot;spiele&quot; gerade auf <a href="http://enigmagroup.org" rel="nofollow">enigmagroup.org</a> die JavaScript Missionen und bin inzwischen bei der letzten angekommen.<br />
Das Passwort berechnet sich dabei aus dem aktuellen Jahr, man kommt also nur weiter wenn man sich zufällig gerade in diesem Jahr befindet oder das gesuchte Jahr herausfindet und es der URL anhängt. Hier der Code:</p>
<pre><code>date = new Date();
year = date.getYear();
pass = 1337;

for(i = 1; i &lt;= year; i++){
  pass += year * i * year;
}

if(pass == 318338237039211050000){
  alert(&quot;Good job!&quot;);
  window.location.href = year + &quot;.php&quot;;
}
else{
  alert(&quot;Sorry, did you fail already?!&quot;);
  window.location.href = &quot;./index.php&quot;;
}
</code></pre>
<p>Ich habe nun versucht mit diesem Code eine Lösung in C++ zu schreiben und bin daran gescheitert.<br />
Ich habe einfach die Jahre hochgezählt und immer pass berechnet und dann mit der langen Zahl (wie in der Routine) verglichen.<br />
Das Problem ist jedoch (und das ist mir erst ziemlich spät eingefallen), dass die Zahl für jeden Datentyp zu groß ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
<p>Ich dachte mir dann, ich könnte die Zahl einfach durch z.B. 1.000.000 dividieren und die restlichen Zahlen als Nachkommestellen mitführen.<br />
Allerdings kommt dabei folgendes raus:</p>
<pre><code>double test=31833823703921106.0000;
printf (&quot;%f&quot;, test);
</code></pre>
<p>Ausgabe:</p>
<pre><code>31833823703921104.000000
</code></pre>
<p>Wie wird denn aus der ...6,0... eine ...4,0... ?<br />
Hat irgendjmd eine Idee wie ich mein Problem lösen könnte?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391153</guid><dc:creator><![CDATA[s0nny]]></dc:creator><pubDate>Tue, 25 Mar 2014 22:00:19 GMT</pubDate></item><item><title><![CDATA[Reply to Mit sehr großen Werten rechnen on Tue, 25 Mar 2014 22:37:34 GMT]]></title><description><![CDATA[<p>Floats sind nicht exakt. Sie sind z.B. für Messwerte brauchbar, weil sie verschiedene Größenbereiche annehmen können (z.B. sowohl 10^-6 als auch für 10^8) und in diesem Bereich annähernd genaue Ergebnisse liefern.</p>
<p>Wenn es exakt sein soll, müssen integer ran.</p>
<p>Wenn long long bzw. std::int64_t nicht reichen, nimm eine bigint library oder bastel dir selber irgendwelche Konstrukte aus mehreren integern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391166</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Tue, 25 Mar 2014 22:37:34 GMT</pubDate></item><item><title><![CDATA[Reply to Mit sehr großen Werten rechnen on Tue, 25 Mar 2014 22:36:58 GMT]]></title><description><![CDATA[<p>Das Rätsel geht nicht auf. Die Lösung wird 158847 sein, aber mit der Eingabe kommt, wenn man genau rechnet, als Ergebnis 318338237039211261689 heraus. Das liegt in der Größenordnung von 2<sup>68</sup> und passt in keinen der üblichen Datentypen (inklusive long double auf den meisten gängigen Plattformen) hinein.</p>
<p>Dem fällt auch der Javascript-Code zum Opfer -- er rechnet ja selbst nicht genau. Der Autor verlässt sich auf ein bestimmtes Rundungsverhalten in der Javascript-Engine, wodurch es mehr oder weniger zur Glückssache wird, ob die richtige Lösung das Rätsel auch lösen wird. Geh am besten direkt auf 158847.php. Oder lass es sein; so richtig viel Plan schien der Autor der Rätsel nicht zu haben, als er sie geschrieben hat, und ich habe meine Zweifel, dass sich die Reise lohnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391167</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 25 Mar 2014 22:36:58 GMT</pubDate></item><item><title><![CDATA[Reply to Mit sehr großen Werten rechnen on Wed, 26 Mar 2014 12:17:46 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antworten.<br />
Das war mir nicht bewußt aber nun hab ich ja, auch wenn es nun nicht funktioniert hat, trotzdem was draus gelernt! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Und die Lösung 158847 ist tatsächlich richtig!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391233</guid><dc:creator><![CDATA[s0nny]]></dc:creator><pubDate>Wed, 26 Mar 2014 12:17:46 GMT</pubDate></item></channel></rss>