{"id":3711,"date":"2018-09-27T09:11:09","date_gmt":"2018-09-27T08:11:09","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=3711"},"modified":"2018-09-27T09:11:09","modified_gmt":"2018-09-27T08:11:09","slug":"c-guns-are-floating-point-numbers-sortable","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=3711","title":{"rendered":"C++ Guns: Are floating point numbers sortable?"},"content":{"rendered":"<p>Sind Gleitkommazahlen sortierbar? Wegen NaN gibt es keine Ordnung und das Sortieren mit NaN im Datensatz schl\u00e4gt fehlt.<br \/>\nAber man kann sich schnell selbst eine Ordnung bauen:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &lt;vector&gt;\r\n#include &lt;algorithm&gt;\r\n#include &lt;iostream&gt;\r\n#include &lt;limits&gt;\r\n#include &lt;cmath&gt;\r\n\r\nusing namespace std;\r\nusing nl = numeric_limits&lt;double&gt;;\r\n\r\nint main() {\r\n  cout &lt;&lt; boolalpha;\r\n\r\n  vector&lt;double&gt; v { 1.0, 2.0, 0.0, 1.0\/3.0, -0.0,\r\n                    nl::quiet_NaN(), nl::infinity(), nl::epsilon(), nl::denorm_min(),\r\n                    nl::max(), nl::min(), nl::lowest()\r\n  };\r\n\r\n  sort(v.begin(), v.end());\r\n\r\n  for(const auto x : v) {\r\n    cout &lt;&lt; x &lt;&lt; &quot; &quot;;\r\n  }\r\n  cout &lt;&lt; &quot;\\nis sorted &quot; &lt;&lt; is_sorted(v.begin(), v.end()) &lt;&lt; &quot; &lt;&lt; offensichtlich falsch\\n&quot;;\r\n\r\n  auto comp = &#x5B;](const auto lhs, const auto rhs) {\r\n    if(isnan(lhs)) return false;\r\n    if(isnan(rhs)) return true;\r\n    return lhs&lt;rhs;\r\n  };\r\n\r\n  sort(v.begin(), v.end(), comp);\r\n\r\n  for(const auto x : v) {\r\n    cout &lt;&lt; x &lt;&lt; &quot; &quot;;\r\n  }\r\n  cout &lt;&lt; &quot;\\nis sorted &quot; &lt;&lt; is_sorted(v.begin(), v.end()) &lt;&lt; &quot;\\n&quot;;\r\n}\r\n<\/pre>\n<blockquote>\n<pre>-1.79769e+308 0 -0 0.333333 1 2 <strong>nan<\/strong> 4.94066e-324 2.22507e-308 2.22045e-16 1.79769e+308 inf \r\nis sorted true << offensichtlich falsch\r\n-1.79769e+308 0 -0 4.94066e-324 2.22507e-308 2.22045e-16 0.333333 1 2 1.79769e+308 inf <strong>nan<\/strong> \r\nis sorted true << richtig<\/pre>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Sind Gleitkommazahlen sortierbar? Wegen NaN gibt es keine Ordnung und das Sortieren mit NaN im Datensatz schl\u00e4gt fehlt. Aber man kann sich schnell selbst eine Ordnung bauen: #include &lt;vector&gt; #include &lt;algorithm&gt; #include &lt;iostream&gt; #include &lt;limits&gt; #include &lt;cmath&gt; using namespace std; using nl = numeric_limits&lt;double&gt;; int main() { cout &lt;&lt; boolalpha; vector&lt;double&gt; v { 1.0, 2.0, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-3711","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/3711","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3711"}],"version-history":[{"count":7,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/3711\/revisions"}],"predecessor-version":[{"id":3718,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/3711\/revisions\/3718"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3711"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3711"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3711"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}