summaryrefslogtreecommitdiffstats
path: root/src/sat/xsat
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2017-01-28 12:01:32 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2017-01-28 12:01:32 -0800
commit782125c61e78d7f14e129667433b54e2fc434d50 (patch)
tree03c2c8230ca0a9e029b72b36e17f1f7768224d7e /src/sat/xsat
parentec6b765314f029ca9ddf5a2f3adc5b496d560f43 (diff)
downloadabc-782125c61e78d7f14e129667433b54e2fc434d50.tar.gz
abc-782125c61e78d7f14e129667433b54e2fc434d50.tar.bz2
abc-782125c61e78d7f14e129667433b54e2fc434d50.zip
Custom floating-point number.
Diffstat (limited to 'src/sat/xsat')
-rw-r--r--src/sat/xsat/xsatFloat.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/sat/xsat/xsatFloat.h b/src/sat/xsat/xsatFloat.h
index 73b74ff7..90149783 100644
--- a/src/sat/xsat/xsatFloat.h
+++ b/src/sat/xsat/xsatFloat.h
@@ -70,6 +70,7 @@ static inline xFloat_t xSat_FloatCreateConst2point5() { retur
static inline xFloat_t xSat_FloatCreateMaximum() { return xSat_Uint2Float( 0xFFFFFFFF ); }
static inline float xSat_Float2Float( xFloat_t a ) { assert(a.Exp < 127); return Abc_Int2Float(((a.Exp + 127) << 23) | ((a.Mnt & 0x7FFF) << 8)); }
+static inline xFloat_t xSat_FloatFromFloat( float a ) { int A = Abc_Float2Int(a); assert(a >= 1.0); return xSat_FloatCreate((A >> 23)-127, 0x8000 | ((A >> 8) & 0x7FFF)); }
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
@@ -180,6 +181,13 @@ static inline void xSat_FloatTest()
xFloat_t c1p5 = xSat_FloatCreateConst1point5();
xFloat_t c2p5 = xSat_FloatCreateConst2point5();
+ xFloat_t c1_ = xSat_FloatFromFloat(1.0);
+ xFloat_t c2_ = xSat_FloatFromFloat(2.0);
+ xFloat_t c3_ = xSat_FloatFromFloat(3.0);
+ xFloat_t c12_ = xSat_FloatFromFloat(12.0);
+ xFloat_t c1p5_ = xSat_FloatFromFloat(1.5);
+ xFloat_t c2p5_ = xSat_FloatFromFloat(2.5);
+
xFloat_t sum1 = xSat_FloatAdd(c1, c1p5);
xFloat_t mul1 = xSat_FloatMul(c2, c1p5);
@@ -197,6 +205,13 @@ static inline void xSat_FloatTest()
printf( "1.5 = %f\n", xSat_Float2Float(c1p5) );
printf( "2.5 = %f\n", xSat_Float2Float(c2p5) );
+ printf( "Converted 1 = %f\n", xSat_Float2Float(c1_) );
+ printf( "Converted 2 = %f\n", xSat_Float2Float(c2_) );
+ printf( "Converted 3 = %f\n", xSat_Float2Float(c3_) );
+ printf( "Converted 12 = %f\n", xSat_Float2Float(c12_) );
+ printf( "Converted 1.5 = %f\n", xSat_Float2Float(c1p5_) );
+ printf( "Converted 2.5 = %f\n", xSat_Float2Float(c2p5_) );
+
printf( "1.0 + 1.5 = %f\n", xSat_Float2Float(sum1) );
printf( "2.0 * 1.5 = %f\n", xSat_Float2Float(mul1) );