# HG changeset patch # User Stefan Vogel # Date 1418732428 -3600 # Node ID 1ee235ddab7fcb17c83aad83ea921f88f4aec5d9 # Parent 614c3a1d3c73136992aa625995ea357841d5746a class: LimitedPrecisionReal added: #digitBytesMSB: #isIEEEFormat #digitBytes diff -r 614c3a1d3c73 -r 1ee235ddab7f LimitedPrecisionReal.st --- a/LimitedPrecisionReal.st Tue Dec 16 13:19:17 2014 +0100 +++ b/LimitedPrecisionReal.st Tue Dec 16 13:20:28 2014 +0100 @@ -497,6 +497,24 @@ " ! +isIEEEFormat + "return true, if this machine represents floats in IEEE format. + Currently, no support is provided for non-ieee machines + to convert their floats into this (which is only relevant, + if such a machine wants to send floats as binary to some other + machine). + Machines with non-IEEE format are VAXed and IBM370-type systems + (among others). Today, most systems use IEEE format floats." + +%{ +#ifdef __s390__ + RETURN(false); +#endif +%}. + + ^ true "/ this may be a lie +! + numBitsInExponent "return the number of bits in the exponent" @@ -666,6 +684,60 @@ " ! ! +!LimitedPrecisionReal methodsFor:'bytes access'! + +digitBytes + "answer the float's digit bytes im IEEE format. + Use the native machine byte ordering." + + |sz "{ Class:SmallInteger }" + bytes| + + sz := self basicSize. + bytes := ByteArray new:sz. + 1 to:sz do:[:i| + bytes at:i put:(self basicAt:i). + ]. + ^ bytes + + " + Float pi digitBytes + ShortFloat pi digitBytes + " +! + +digitBytesMSB:msb + "answer the float's digit bytes im IEEE format. + If msb == true, use MSB byte order, otherwise LSB byte order." + + |sz "{ Class:SmallInteger }" + bytes| + + self class isIEEEFormat ifFalse:[self error:'unsupported operation']. + + sz := self basicSize. + bytes := ByteArray new:sz. + + (UninterpretedBytes isBigEndian == msb) ifTrue:[ + 1 to:sz do:[:i| + bytes at:i put:(self basicAt:i). + ]. + ] ifFalse:[ + "reverse the bytes" + 1 to:sz do:[:i| + bytes at:sz-i+1 put:(self basicAt:i). + ]. + ]. + ^ bytes + + " + Float pi digitBytesMSB:false + Float pi digitBytesMSB:true + ShortFloat pi digitBytesMSB:false + ShortFloat pi digitBytesMSB:true + " +! ! + !LimitedPrecisionReal methodsFor:'coercing & converting'! asFloat @@ -1280,11 +1352,11 @@ !LimitedPrecisionReal class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libbasic/LimitedPrecisionReal.st,v 1.80 2014-12-11 14:10:25 cg Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/LimitedPrecisionReal.st,v 1.81 2014-12-16 12:20:28 stefan Exp $' ! version_CVS - ^ '$Header: /cvs/stx/stx/libbasic/LimitedPrecisionReal.st,v 1.80 2014-12-11 14:10:25 cg Exp $' + ^ '$Header: /cvs/stx/stx/libbasic/LimitedPrecisionReal.st,v 1.81 2014-12-16 12:20:28 stefan Exp $' ! !