User:HaydenBobMutthew/Mathematical analog circuit

A mathematical analog circuit is a circuit which operates on signal strength, such as arithmetic and comparison.

Introduction
Since there is no redstone adder in Minecraft, we need to convert addition into subtraction.

a + b = a + b - 15 + 15 = - 15 + a + b + 15 = - (15 - a - b) + 15 = 15 - (15 - a - b)

However, as signal strength cannot be higher than 15, we need to have sum and carry out outputs on the adder. Then we have:

sum = / a + b if a + b < 16 \ a + b - 16 if a + b ≥ 16 = / 15 - (15 - a - b) if a + b < 16 (hereinafter omitted) \ a + b - 15 - 1 if a + b ≥ 16 = a - 15 + b - 1 = - (15 - a) + (b - 1) = (b - 1) - (15 - a) carry out = / 0 if a + b < 16 \ 1 if a + b ≥ 16

In an adder, there is also a carry in input (denoted by c below) on the adder, called a full adder, so we have the following equations:

sum = a + b + c    = / 15 - (15 - a - b - c) if a + b + c < 16 (hereinafter omitted) \ (b + c - 1) - (15 - a) if a + b + c ≥ 16 = (b - 1 + c) - (15 - a)    = b - (1 - c) - (15 - a) carry out = / 0 if a + b + c < 16 \ 1 if a + b + c ≥ 16

If a + b + c > 15, 15 - (15 - a - b - c) will be 15 in terms of comparators. If a + b + c < 16, b - (1 - c) - (15 - a) will be 0 in terms of comparators. This runs a problem: if a + b + c = 15 or 16, then 15 - (15 - a - b - c) will be 15 and b - (1 - c) - (15 - a) will be 0, making impossible to distinguish whether the first expression or second expression should be the final output. So this method didn't work. We can spilt the full adder into two half adders, but it increases the circuit delay. See the next section for the workaround.

Designs

 * Seiterarch's analog full adder


 * Newomaster's analog full adder

Disadvantages
These adders are called ripple-carry adders. However, the ripple-carry adder is relatively slow, since each full adder must wait for the carry out to be calculated from the previous full adder. We may use the carry cancel adder, which have less circuit delay than the ripple-carry adder. See the next section for more details.

Carry cancel adder
The carry cancel adder (CCA) is based on comparator XOR gates. A 4-hexdecimal digit carry cancel adder have a lower circuit delay than ripple-carry adders by a factor of 4, since the carry is computed in parallel. Currently, the only analog carry cancel adder is designed by YellowBunny.

Introduction
Although we have a redstone subtractor that can be achieved by a comparator in subtract mode, there are no negative signal strength in Minecraft. Our first approach is to convert subtraction into addition using the NOT operation. diff = a - b - c where c is the borrow in     = a + (NOT b + 1) + (NOT c + 1) = a + (15 - b) + (1 - c + 2) = a + (15 - b) + (1 - c) since the final borrow/carry in can only have values 0 or 1

Then we can apply an analog inverter before the "b" input. See the next section for more information about analog inverters.

Analog inverter
An signal strength inverter is a circuit that inverts the signal strength, for example a signal with the strength of 6 will be changed to 9, and a full strength signal will be 0. This can be achieved by placing a redstone block or redstone torch at the back of a redstone comparator and the input signal will be at the side of the comparator, and the output signal will be at front of the comparator, or by making a signal strength repeater wire, but instead of the wire in front of the repeater, place a block with a redstone torch attached to the front. place a wire in front of every torch, and the bottom-left redstone dust is the output. Note that the signal strength inverter works as a 4-bit bitwise NOT operation.

Comparison within 0 and 15

 * A is equal to B (A=B)


 * 9×2×5 (90 block volume)
 * silent
 * circuit delay: 4 ticks


 * Earliest Known Publication: January 9, 2013


 * A is greater or equal to B (A≥B)


 * 2×3×1 (6 block volume)
 * flat, silent
 * circuit delay: 1 tick


 * Earliest Known Publication: January 9, 2013

This design directly use the comparison mode of the comparator that if A is greater or equal to B then it will output A, otherwise turns off the output.


 * A is greater than B (A>B)


 * 3×5×1 (15 block volume)
 * flat
 * circuit delay: 2 ticks
 * Earliest Known Publication: January 9, 2013

When A is lesser or equal to B, the left comparator turns on and activates the sticky piston, thus disabling the output. When A is greater than B, the left comparator turns off and outputs A.


 * A is lesser or equal to B (A≤B)


 * 3×5×1 (15 block volume)
 * flat
 * circuit delay: 2 ticks
 * Earliest Known Publication: January 9, 2013

When A is lesser or equal to B, the left comparator turns on and activates the sticky piston, thus enabling the output and outputs A. When A is greater than B, the left comparator turns off and disabling the output.


 * A is lesser than B (A<B)


 * 3×4×1 (12 block volume)
 * flat, silent
 * circuit delay: 3 ticks
 * Earliest Known Publication: January 9, 2013

When A is greater or equal to B, the the subtractor turns off the output. When a is lesser than B, the subtractor outputs B - A.


 * X is between A and B inclusive (A≤X≤B)


 * 5×4×1 (20 block volume)
 * flat, silent
 * circuit delay: 4 ticks
 * Earliest Known Publication: August 2, 2017

When X is greater or equal to A, then the torch at the left will turn off. When X is smaller or equal to B, the redstone line at the right will turn on. If both conditions are met, then the output torch will turn on.

Variations: To change "lesser or equal to" to "lesser than" at the left or the right, set the comparator to subtraction mode at the respective sides.

Comparing larger numbers
One may use an analog subtractor and the following facts to compare larger numbers: A > B: A > B       A - B > 0 (borrow out is off) A < B: A < B       A - B > 0 (borrow out is on) A = B: A = B       A - B = 0 For A = B, one may also chain all the outputs of the analog equality detector to an AND gate.


 * (n+1)×3×2
 * flat, silent
 * circuit delay: n ticks