better rounding (better behavior for negative numbers

This commit is contained in:
David Rose 2003-04-10 01:12:36 +00:00
parent fb284b821f
commit 5d86a43700

View File

@ -3,21 +3,21 @@
# Import the type numbers # Import the type numbers
import DCSubatomicType import DCSubatomicType
if subatomicType == DCSubatomicType.STInt8: if subatomicType == DCSubatomicType.STInt8:
self.addInt8(int(arg*divisor+0.5)) self.addInt8(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STInt16: elif subatomicType == DCSubatomicType.STInt16:
self.addInt16(int(arg*divisor+0.5)) self.addInt16(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STInt32: elif subatomicType == DCSubatomicType.STInt32:
self.addInt32(int(arg*divisor+0.5)) self.addInt32(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STInt64: elif subatomicType == DCSubatomicType.STInt64:
self.addInt64(int(arg*divisor+0.5)) self.addInt64(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STUint8: elif subatomicType == DCSubatomicType.STUint8:
self.addUint8(int(arg*divisor+0.5)) self.addUint8(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STUint16: elif subatomicType == DCSubatomicType.STUint16:
self.addUint16(int(arg*divisor+0.5)) self.addUint16(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STUint32: elif subatomicType == DCSubatomicType.STUint32:
self.addUint32(int(arg*divisor+0.5)) self.addUint32(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STUint64: elif subatomicType == DCSubatomicType.STUint64:
self.addUint64(int(arg*divisor+0.5)) self.addUint64(int(round(arg*divisor)))
elif subatomicType == DCSubatomicType.STFloat64: elif subatomicType == DCSubatomicType.STFloat64:
self.addFloat64(arg) self.addFloat64(arg)
elif subatomicType == DCSubatomicType.STString: elif subatomicType == DCSubatomicType.STString:
@ -27,32 +27,32 @@
elif subatomicType == DCSubatomicType.STInt8array: elif subatomicType == DCSubatomicType.STInt8array:
self.addUint16(len(arg)) self.addUint16(len(arg))
for i in arg: for i in arg:
self.addInt8(int(i*divisor+0.5)) self.addInt8(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STInt16array: elif subatomicType == DCSubatomicType.STInt16array:
self.addUint16(len(arg) << 1) self.addUint16(len(arg) << 1)
for i in arg: for i in arg:
self.addInt16(int(i*divisor+0.5)) self.addInt16(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STInt32array: elif subatomicType == DCSubatomicType.STInt32array:
self.addUint16(len(arg) << 2) self.addUint16(len(arg) << 2)
for i in arg: for i in arg:
self.addInt32(int(i*divisor+0.5)) self.addInt32(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STUint8array: elif subatomicType == DCSubatomicType.STUint8array:
self.addUint16(len(arg)) self.addUint16(len(arg))
for i in arg: for i in arg:
self.addUint8(int(i*divisor+0.5)) self.addUint8(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STUint16array: elif subatomicType == DCSubatomicType.STUint16array:
self.addUint16(len(arg) << 1) self.addUint16(len(arg) << 1)
for i in arg: for i in arg:
self.addUint16(int(i*divisor+0.5)) self.addUint16(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STUint32array: elif subatomicType == DCSubatomicType.STUint32array:
self.addUint16(len(arg) << 2) self.addUint16(len(arg) << 2)
for i in arg: for i in arg:
self.addUint32(int(i*divisor+0.5)) self.addUint32(int(round(i*divisor)))
elif subatomicType == DCSubatomicType.STUint32uint8array: elif subatomicType == DCSubatomicType.STUint32uint8array:
self.addUint16(len(arg) * 5) self.addUint16(len(arg) * 5)
for i in arg: for i in arg:
self.addUint32(int(i[0]*divisor+0.5)) self.addUint32(int(round(i[0]*divisor)))
self.addUint8(int(i[1]*divisor+0.5)) self.addUint8(int(round(i[1]*divisor)))
else: else:
raise Exception("Error: No such type as: " + str(subatomicType)) raise Exception("Error: No such type as: " + str(subatomicType))
return None return None