Post by Brandon Parker on Mar 31, 2021 17:38:52 GMT -5
The Arbitrary Size Bit Adder code shown below should all show an overflow, but it does not. The code runs normally under LB 4.5.1. The bit string appears to be formatted correctly, but something is going awry with the carryOut variable. Maybe because each function uses the same named ByRef carryOut variable?
Hardware: Samsung Laptop Intel Core i7, 16GB of RAM
Operating System: Windows 10 Home build 18363.1016 - 64-bit
{:0)
Brandon Parker
' 0110
' 1110
'=0100 with Overflow
Print arbitrarySizeBitAdder$(8, "0110", "1110", Overflow);", Overflow: ";Overflow
Print arbitrarySizeBitAdder$(8, "10010011", "11111111", Overflow);", Overflow: ";Overflow
Print arbitrarySizeBitAdder2$(8, "10010011", "11111111", Overflow);", Overflow: ";Overflow
'____________________________________________________________________________________________________________________
'____________________________________________________________________________________________________________________
Function xorGate(a, b)
xorGate = ((a And Not(b)) Or (Not(a) And b))
End Function
'____________________________________________________________________________________________________________________
'____________________________________________________________________________________________________________________
Function halfAdder(a, b, ByRef carryOut)
carryOut = 0
halfAdder = xorGate(a, b)
carryOut = (a And b)
End Function
'____________________________________________________________________________________________________________________
'____________________________________________________________________________________________________________________
Function fullAdderFromHalfAdder(a, b, carryIn, ByRef carryOut)
fullAdderFromHalfAdder = halfAdder(halfAdder(carryIn, a, carryOutA), b, carryOutB)
carryOut = (carryOutA Or carryOutB)
End Function
'____________________________________________________________________________________________________________________
'____________________________________________________________________________________________________________________
Function fullAdder(a, b, carryIn, ByRef carryOut)
carryOut = 0
xorAB = xorGate(a, b)
fullAdder = xorGate(xorAB, carryIn)
carryOut = ((xorAB And carryIn) Or (a And b))
End Function
'____________________________________________________________________________________________________________________
'____________________________________________________________________________________________________________________
Function arbitrarySizeBitAdder$(bitCount, bitSet1$, bitSet2$, ByRef vBit)
vBit = 0
bitSet1$ = Right$(string$("0", bitCount);bitSet1$, bitCount)
bitSet2$ = Right$(string$("0", bitCount);bitSet2$, bitCount)
For i = bitCount To 1 Step -1
arbitrarySizeBitAdder$ = fullAdderFromHalfAdder(Val(Mid$(bitSet1$, i, 1)), Val(Mid$(bitSet2$, i, 1)), vBit, vBit);arbitrarySizeBitAdder$
Next i
End Function
'____________________________________________________________________________________________________________________
'____________________________________________________________________________________________________________________
Function arbitrarySizeBitAdder2$(bitCount, bitSet1$, bitSet2$, ByRef vBit)
vBit = 0
bitSet1$ = Right$(string$("0", bitCount);bitSet1$, bitCount)
bitSet2$ = Right$(string$("0", bitCount);bitSet2$, bitCount)
For i = bitCount To 1 Step -1
arbitrarySizeBitAdder2$ = fullAdder(Val(Mid$(bitSet1$, i, 1)), Val(Mid$(bitSet2$, i, 1)), vBit, vBit);arbitrarySizeBitAdder2$
Next i
End Function
'____________________________________________________________________________________________________________________
'____________________________________________________________________________________________________________________
Function string$(myString$, numstring)
For i = 1 To numstring
string$ = string$ + myString$
Next i
End Function
'____________________________________________________________________________________________________________________
'____________________________________________________________________________________________________________________
Hardware: Samsung Laptop Intel Core i7, 16GB of RAM
Operating System: Windows 10 Home build 18363.1016 - 64-bit
{:0)
Brandon Parker