An apparatus for accelerating the quantized computation of an artificial neural network comprising: a storage device configured to store low-precision inputs to be used in a convolution operation, wherein the low-precision inputs are generated from high-precision inputs using asymmetrical quantization to unsigned integers, wherein the high-precision inputs comprise weights (934, 936) and input data elements (932, 938) for a layer of an artificial neural network, and the weights and the input data elements are quantized to integer numbers; an array of subtraction engines (930a, 930b, 930c, 930d) configured to receive the low-precision inputs (932, 934, 936, 938) from the storage device and subtract a low-precision value representing a high-precision zero value from the low-precision inputs, thereby creating difference values (942, 944), wherein the low-precision value representing the high-precision zero value is a zero-point integer, wherein the difference values are provided to a systolic array which includes a two-dimensional array of processing elements PE, wherein the array of subtraction engines (930a, 930b, 930c, 930d) is configured to subtract from low-precision inputs corresponding to both the weights and the input data elements to create difference values according to the formulas: X adj = X q ik − X qz, and Y adj = W q kj − W qz, in which X qz is a zero point integer for the input data elements, W qz is a zero point integer for the weights, X q is a quantized integer number of an input data element, W q is a quantized integer number of a corresponding weight, and X adj and Y adj are the created difference values obtained for the input data element X q and the weight W q; the processing element PE array configured to generate a sum Z of products using the difference values according to the formula: Z = ∑ k X adj ∗ Y adj., the PE array including a plurality of rows of processing elements, each row of processing elements (920a, 920b, 920c, 920d) configured to receive difference values from a corresponding subtraction engine (930a, 930b, 930c, 930d); and a processing engine configured to scale the sum of products by a scaling factor to generate a high-precision output. a storage device configured to store low-precision inputs to be used in a convolution operation, wherein the low-precision inputs are generated from high-precision inputs using asymmetrical quantization to unsigned integers, wherein the high-precision inputs comprise weights (934, 936) and input data elements (932, 938) for a layer of an artificial neural network, and the weights and the input data elements are quantized to integer numbers; an array of subtraction engines (930a, 930b, 930c, 930d) configured to receive the low-precision inputs (932, 934, 936, 938) from the storage device and subtract a low-precision value representing a high-precision zero value from the low-precision inputs, thereby creating difference values (942, 944), wherein the low-precision value representing the high-precision zero value is a zero-point integer, wherein the difference values are provided to a systolic array which includes a two-dimensional array of processing elements PE, wherein the array of subtraction engines (930a, 930b, 930c, 930d) is configured to subtract from low-precision inputs corresponding to both the weights and the input data elements to create difference values according to the formulas: X adj = X q ik − X qz, and Y adj = W q kj − W qz, in which X qz is a zero point integer for the input data elements, W qz is a zero point integer for the weights, X q is a quantized integer number of an input data element, W q is a quantized integer number of a corresponding weight, and X adj and Y adj are the created difference values obtained for the input data element X q and the weight W q; the processing element PE array configured to generate a sum Z of products using the difference values according to the formula: Z = ∑ k X adj ∗ Y adj., the PE array including a plurality of rows of processing elements, each row of processing elements (920a, 920b, 920c, 920d) configured to receive difference values from a corresponding subtraction engine (930a, 930b, 930c, 930d); and a processing engine configured to scale the sum of products by a scaling factor to generate a high-precision output.