You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by fa...@apache.org on 2008/05/27 14:31:48 UTC
svn commit: r660486 - /stdcxx/branches/4.2.x/etc/config/src/INFINITY.cpp
Author: faridz
Date: Tue May 27 05:31:45 2008
New Revision: 660486
URL: http://svn.apache.org/viewvc?rev=660486&view=rev
Log:
2008-05-27 Farid Zaripov <fa...@epam.com>
* etc/config/src/INFINITY.cpp (flt_qnan): Clear sign bit to obtain value of positive qnan.
(dbl_qnan): Ditto.
(ldbl_qnan): Ditto.
Modified:
stdcxx/branches/4.2.x/etc/config/src/INFINITY.cpp
Modified: stdcxx/branches/4.2.x/etc/config/src/INFINITY.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/etc/config/src/INFINITY.cpp?rev=660486&r1=660485&r2=660486&view=diff
==============================================================================
--- stdcxx/branches/4.2.x/etc/config/src/INFINITY.cpp (original)
+++ stdcxx/branches/4.2.x/etc/config/src/INFINITY.cpp Tue May 27 05:31:45 2008
@@ -165,6 +165,15 @@
val.val /= flt_zero ();
+ // val.val can be +qnan or -qnan
+ // clear sign bit
+ if (e == big_endian) {
+ val.bits [0] &= '\x7f';
+ }
+ else {
+ val.bits [sizeof (val.val) - 1] &= '\x7f';
+ }
+
#else // if !defined (_RWSTD_NO_DBL_TRAPS)
// floating point arithmetic traps
@@ -172,7 +181,7 @@
// assume IEEE 754 floating point format
if (e == big_endian) {
- val.bits [0] = '\xff';
+ val.bits [0] = '\x7f';
val.bits [1] = '\xc0';
val.bits [2] = '\0';
val.bits [3] = '\0';
@@ -181,7 +190,7 @@
val.bits [0] = '\0';
val.bits [1] = '\0';
val.bits [2] = '\xc0';
- val.bits [3] = '\xff';
+ val.bits [3] = '\x7f';
}
#endif // _RWSTD_NO_DBL_TRAPS
@@ -355,6 +364,15 @@
val.val /= dbl_zero ();
+ // val.val can be +qnan or -qnan
+ // clear sign bit
+ if (e == big_endian) {
+ val.bits [0] &= '\x7f';
+ }
+ else {
+ val.bits [sizeof (val.val) - 1] &= '\x7f';
+ }
+
#else // if !defined (_RWSTD_NO_DBL_TRAPS)
// floating point arithmetic traps
@@ -362,7 +380,7 @@
// assume IEEE 754 floating point format
if (e == big_endian) {
- val.bits [0] = '\xff';
+ val.bits [0] = '\x7f';
val.bits [1] = '\xf8';
val.bits [2] = '\0';
val.bits [3] = '\0';
@@ -379,7 +397,7 @@
val.bits [4] = '\0';
val.bits [5] = '\0';
val.bits [6] = '\xf8';
- val.bits [7] = '\xff';
+ val.bits [7] = '\x7f';
}
#endif // _RWSTD_NO_DBL_TRAPS
@@ -587,6 +605,18 @@
val.val /= ldbl_zero ();
+ // val.val can be +qnan or -qnan
+ // clear sign bit
+ if (e == big_endian) {
+ val.bits [0] &= '\x7f';
+ }
+ else {
+ unsigned inx = sizeof (val.val) - 1;
+ // skip the trailing zero's
+ while (!val.bits [inx]) --inx;
+ val.bits [inx] &= '\x7f';
+ }
+
#else // if !defined (_RWSTD_NO_DBL_TRAPS)
// floating point arithmetic traps
@@ -594,7 +624,7 @@
// assume IEEE 754 floating point format
if (e == big_endian) {
- val.bits [ 0] = '\xff';
+ val.bits [ 0] = '\x7f';
val.bits [ 1] = '\xff';
val.bits [ 2] = '\x80';
val.bits [ 3] = '\0';
@@ -627,7 +657,7 @@
val.bits [12] = '\0';
val.bits [13] = '\x80';
val.bits [14] = '\xff';
- val.bits [15] = '\xff';
+ val.bits [15] = '\x7f';
}
#endif // _RWSTD_NO_DBL_TRAPS