📄 nan.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3O//DTD W3 HTML 2.0//EN"><!-- This collection of hypertext pages is Copyright 1995-2005 by Steve Summit. --><!-- Content from the book "C Programming FAQs: Frequently Asked Questions" --><!-- (Addison-Wesley, 1995, ISBN 0-201-84519-9) is made available here by --><!-- permission of the author and the publisher as a service to the community. --><!-- It is intended to complement the use of the published text --><!-- and is protected by international copyright laws. --><!-- The on-line content may be accessed freely for personal use --><!-- but may not be published or retransmitted without explicit permission. --><!-- --><!-- this page built Sat Dec 24 21:47:46 2005 by faqproc version 2.7 --><!-- from source file fp.sgml dated Fri Jul 2 23:51:18 2004 --><!-- corresponding to FAQ list version 4.0 --><html><!-- Mirrored from c-faq.com/fp/nan.html by HTTrack Website Copier/3.x [XR&CO'2008], Sat, 14 Mar 2009 07:59:00 GMT --><head><meta name=GENERATOR content="faqproc"><title>Question 14.9</title><link href="mpi.html" rev=precedes><link href="fpexcepts.html" rel=precedes><link href="index.html" rev=subdocument></head><body bgcolor="#ffffff"><a href="mpi.html" rev=precedes><img src="../images/buttonleft.gif" alt="prev"></a><a href="index.html" rev=subdocument><img src="../images/buttonup.gif" alt="up"></a><a href="fpexcepts.html" rel=precedes><img src="../images/buttonright.gif" alt="next"></a> <a href="../index-2.html"><img src="../images/buttontop.gif" alt="top/contents"></a><a href="../search.html"><img src="../images/buttonsrch.gif" alt="search"></a><hr><p><!-- qbegin --><h1>comp.lang.c FAQ list<font color=blue>·</font><!-- qtag -->Question 14.9</h1><p><font face=Helvetica size=8 color=blue><b>Q:</b></font>How do Iset variables to, ortest forIEEE NaN(``Not a Number'')and other special values?</p><p><hr><p><font face=Helvetica size=8 color=blue><b>A:</b></font>Many systemswith high-quality IEEE floating-point implementations providefacilities(e.g.predefined constants,and functionslike<TT>isnan()</TT>,eitheras nonstandard extensionsin <TT><math.h></TT>or perhapsin<TT><ieee.h></TT>or<TT><nan.h></TT>)to deal with these values cleanly,andwork is being doneto formally standardize such facilities.A crude but usually effective test for NaNcan be written based on the fact that IEEE NaN'snever compare equal to anything,even themselves;thereforea number that doesn't compare equal to itselfmust be a NaN:<pre> #define isnan(x) ((x) != (x))</pre>Beware, though, thatnon-IEEE-aware compilers mayoptimize the test away.(Note also thateven if you do have a predefined constant like <TT>NAN</TT>,you <em>cannot</em> use it in comparisons like <TT>if(x == NAN)</TT>,again becauseNaN's do not compare equal to themselves.)</p><p>C99 provides<TT>isnan()</TT>,<TT>fpclassify()</TT>,and several other classification routines.</p><p>Anotherpossibilityisto formatthe value in questionusing<TT>sprintf</TT>:onmany systemsitgeneratesstrings like <TT>"NaN"</TT> and <TT>"Inf"</TT>which you could compare forin a pinch.</p><p>To initialize variables with these values(and if your system does not provide cleaner solutions),you may be able to get away with some compile-time``arithmetic'':<pre> double nan = 0./0.; double inf = 1./0.;</pre>Don't be toosurprised,though,if these don't work(or if they abort the compiler with a floating-point exception).</p><p>(The most reliable way of setting up these special valueswould use a hex representation of their internal bit patterns,but initializing a floating-point value with a bit patternwould require using a union or some other type punning mechanismandwould obviously bemachine-dependent.)</p><p>See also question <a href="../osdep/fpexcepts.html">19.39</a>.</p><p>References:C9X Sec. 7.7.3<br></p><!-- aend --><p><hr><a href="mpi.html" rev=precedes><img src="../images/buttonleft.gif" alt="prev"></a><a href="index.html" rev=subdocument><img src="../images/buttonup.gif" alt="up"></a><a href="fpexcepts.html" rel=precedes><img src="../images/buttonright.gif" alt="next"></a> <a href="../questions.html"><img src="../images/buttontop.gif" alt="contents"></a><a href="../search.html"><img src="../images/buttonsrch.gif" alt="search"></a><br><!-- lastfooter --><a href="../about.html">about this FAQ list</a> <a href="../eskimo.html">about eskimo</a> <a href="../search.html">search</a> <a href="../feedback.html">feedback</a> <a href="copyright.html">copyright</a><p>Hosted by<a href="http://www.eskimo.com/"><img src="../../www.eskimo.com/img/link/eskitiny.gif" alt="Eskimo North"></a></body><!-- Mirrored from c-faq.com/fp/nan.html by HTTrack Website Copier/3.x [XR&CO'2008], Sat, 14 Mar 2009 07:59:00 GMT --></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -