Spin : Unsigned Longs
hippy
Posts: 1,981
To save re-inventing the wheel, a wad of testing, debugging and proving, does anyone have any code already written to handle unsigned long variables ...
* To add two numbers with overflow detected
* To subtract two numbers with underflow detected
* To compare two numbers
I've got a set of compare routines but cannot help thinking there must be a better way to do it ...
Post Edited (hippy) : 11/12/2007 4:57:59 PM GMT
* To add two numbers with overflow detected
* To subtract two numbers with underflow detected
* To compare two numbers
I've got a set of compare routines but cannot help thinking there must be a better way to do it ...
CON LT = %100 EQ = %010 GT = %001 LE = %110 NE = %101 GE = %011 PRI CompareUnsigned( lhs, rhs ) if lhs == rhs ' lhs rhs result := EQ ' ??? ??? => lhs EQ rhs else if lhs => 0 if rhs => 0 if lhs > rhs result := GT ' +Ve +Ve => lhs GT rhs else result := LT ' +Ve +Ve => lhs LT rhs else result := LT ' +Ve -Ve => lhs LT rhs else if rhs => 0 result := GT ' -Ve +Ve => lhs GT rhs else if lhs > rhs result := GT ' -Ve -Ve => lhs GT rhs else result := LT ' -Ve -Ve => lhs LT rhs PRI IsUnsignedLt( lhs, rhs ) result := CompareUnsigned(lhs,rhs) == LT PRI IsUnsignedEq( lhs, rhs ) result := lhs == rhs PRI IsUnsignedGt( lhs, rhs ) result := CompareUnsigned(lhs,rhs) == GT PRI IsUnsignedLe( lhs, rhs ) result := ( CompareUnsigned(lhs,rhs) & LE ) <> 0 PRI IsUnsignedNe( lhs, rhs ) result := lhs <> rhs PRI IsUnsignedGe( lhs, rhs ) result := ( CompareUnsigned(lhs,rhs) & GE ) <> 0
Post Edited (hippy) : 11/12/2007 4:57:59 PM GMT