I just realized that what I&#39;m doing won&#39;t work on older versions of python, anyway...<br><br>Things work fine on 2.6 <br><br>Python 2.6.2 (r262:71600, Sep  3 2009, 09:36:43)<br>[GCC 3.4.6 20060404 (Red Hat 3.4.6-9)] on linux2<br>
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.<br>&gt;&gt;&gt; import struct<br>&gt;&gt;&gt; struct.pack(&#39;f&#39;, -0.0)<br>&#39;\x00\x00\x00\x80&#39;          &lt;-- Has sign bit<br>
&gt;&gt;&gt; struct.pack(&#39;&gt;f&#39;, -0.0)<br>&#39;\x80\x00\x00\x00&#39;          &lt;-- Has sign bit<br>&gt;&gt;&gt; struct.pack(&#39;&lt;f&#39;, -0.0)<br>&#39;\x00\x00\x00\x80&#39;          &lt;-- Has sign bit<br>&gt;&gt;&gt; struct.pack(&#39;=f&#39;, -0.0)<br>
&#39;\x00\x00\x00\x80&#39;<br>&gt;&gt;&gt;             <br><br>But on python 2.3 it only works for the native endian case<br><br>Python 2.3.4 (#1, Jan  9 2007, 16:40:09)<br>[GCC 3.4.6 20060404 (Red Hat 3.4.6-3)] on linux2<br>
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.<br>&gt;&gt;&gt; import struct<br>&gt;&gt;&gt; struct.pack(&#39;f&#39;, -0.0)<br>&#39;\x00\x00\x00\x80&#39;          &lt;-- Correct, has sign bit and unpacks to -0.0<br>
&gt;&gt;&gt; struct.pack(&#39;&gt;f&#39;, -0.0)<br>&#39;\x00\x00\x00\x00&#39;          &lt;-- (big-endian) Lost the sign bit! Unpacks to 0.0<br>&gt;&gt;&gt; struct.pack(&#39;&lt;f&#39;, -0.0)<br>&#39;\x00\x00\x00\x00&#39;          &lt;-- (big-endian) Lost the sign bit!<br>
&gt;&gt;&gt; struct.pack(&#39;=f&#39;, -0.0)<br>&#39;\x00\x00\x00\x00&#39;          &lt;-- (whichever is native) Lost the sign bit!<br>&gt;&gt;&gt;       <br><br>So I guess prior to 2.6 (which as xavier pointed out, has copysign)  trying to use struct won&#39;t be endian-independent.<br>
<br>Of course, you could always do x.__repr__().startswith(&#39;-&#39;), but it&#39;s slow, ugly, and you already said you wanted to avoid  it.  On the other hand, it works everywhere with any version of python.<br><br>At any rate, I&#39;m doubt I&#39;m helping that much, <br>
-Joe<br><div class="gmail_quote">On Tue, Sep 29, 2009 at 12:19 PM, Joe Kington <span dir="ltr">&lt;<a href="mailto:jkington@wisc.edu">jkington@wisc.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Well, this is messy, and nearly unreadable, but it should work and is pure python(and I think even be endian-independent).<br><br>struct.unpack(&#39;b&#39;,struct.pack(&#39;&gt;d&#39;, X)[0])[0] &gt;= 0<br>(where X is the variable you want to test) <br>

<br>In [54]: struct.unpack(&#39;b&#39;,struct.pack(&#39;&gt;d&#39;,0.0)[0])[0] &gt;= 0<br>Out[54]: True<br><br>In [55]: struct.unpack(&#39;b&#39;,struct.pack(&#39;&gt;d&#39;,-0.0)[0])[0] &gt;= 0<br>Out[55]: False<br><br>
In [56]: struct.unpack(&#39;b&#39;,struct.pack(&#39;&gt;d&#39;,-0.0000001)[0])[0] &gt;= 0<br>
Out[56]: False<br><br>In [57]: struct.unpack(&#39;b&#39;,struct.pack(&#39;&gt;d&#39;,0.0000001)[0])[0] &gt;= 0<br>Out[57]: True<br><br>In [58]: struct.unpack(&#39;b&#39;,struct.pack(&#39;&gt;d&#39;,3999564.8763)[0])[0] &gt;= 0<br>

Out[58]: True<br><br>In [59]: struct.unpack(&#39;b&#39;,struct.pack(&#39;&gt;d&#39;,-3999564.8763)[0])[0] &gt;= 0<br>Out[59]: False<br><br>Hope that helps, anyway<br><font color="#888888">-Joe</font><div><div></div><div class="h5">
<br><br><div class="gmail_quote">On Tue, Sep 29, 2009 at 12:04 PM, Christopher Barker <span dir="ltr">&lt;<a href="mailto:Chris.Barker@noaa.gov" target="_blank">Chris.Barker@noaa.gov</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div>Pauli Virtanen wrote:<br>
&gt; Tue, 29 Sep 2009 09:53:40 -0700, Christopher Barker wrote:<br>
&gt; [clip]<br>
&gt;&gt; How can I identify -0.0?<br>
&gt;<br>
&gt; signbit<br>
&gt;<br>
<br>
</div>perfect for numpy, but at this point I don&#39;t have a numpy dependency<br>
(very unusual for my code!). Anyone know a pure-python way to get it?<br>
<br>
It seems I should be able to do something like:<br>
<br>
struct.pack(&quot;d&quot;,-3.4)[0] &amp; Something<br>
<br>
but I&#39;m not sure what &quot;Something&quot; is, and it would be endian-dependent,<br>
wouldn&#39;t it?<br>
<div><br>
thanks,<br>
-Chris<br>
<br>
<br>
--<br>
Christopher Barker, Ph.D.<br>
Oceanographer<br>
<br>
Emergency Response Division<br>
NOAA/NOS/OR&amp;R            (206) 526-6959   voice<br>
7600 Sand Point Way NE   (206) 526-6329   fax<br>
Seattle, WA  98115       (206) 526-6317   main reception<br>
<br>
<a href="mailto:Chris.Barker@noaa.gov" target="_blank">Chris.Barker@noaa.gov</a><br>
_______________________________________________<br>
</div><div><div></div><div>NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org" target="_blank">NumPy-Discussion@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
</div></div></blockquote></div><br>
</div></div></blockquote></div><br>