quantized range of fake_quant_with_min_max_args is -2**num_bits + 1 to 2 ** num_bits.
@bfs18 I was able ti run the code successfully using colab, could you please have a look at this [gist](https://colab.research.google.com/gist/sushreebarsa/f3a5afe835c60b19c7ae22bbe4da783b/61529.ipynb#scrollTo=XJRwhkCxST9R) and confirm the outcome?
Thank you! > 

Hi @sushreebarsa , the result is the same as mine. The problem is 128 cannot be represented by an 8-bit signed number.
### Issue type

Bug

### Have you reproduced the bug with TensorFlow Nightly?

Yes

### Source

source

### TensorFlow version

tf 2.13

### Custom code

Yes

### OS platform and distribution

ubuntu 22.04

### Mobile device

_No response_

### Python version

_No response_

### Bazel version

_No response_

### GCC/compiler version

_No response_

### CUDA/cuDNN version

_No response_

### GPU model and memory

_No response_

### Current behavior?

I implemented `fake_quant_with_min_max_args` in numpy according to the source code to get the quantized values. However the quantized range is `-2**num_bits + 1` to `2 ** num_bits` and the quantized weights cannot be represented by `num_bits` int.  What should I do if I have to use signed type to represent the weights?

### Standalone code to reproduce the issue

```shell
def fake_quant_with_min_max_args(inputs, min=-0.99, max=0.99, num_bits=8, narrow_range=False):
    assert min < 0 < max
    quant_min = 1 if narrow_range else 0
    quant_max = (1 << num_bits) - 1
    quant_min_float = np.float32(quant_min)
    quant_max_float = np.float32(quant_max)
    scale = np.float32(max - min) / (quant_max_float - quant_min_float)
    inv_scale = (quant_max_float - quant_min_float) / np.float32(max - min)

    zero_point_from_min = quant_min - min / scale
    if zero_point_from_min < quant_min:
        nudged_zero_point = quant_min
    elif zero_point_from_min > quant_max:
        nudged_zero_point = quant_max
    else:
        nudged_zero_point = np.round(zero_point_from_min)

    nudged_min = (quant_min_float - nudged_zero_point) * scale
    nudged_max = (quant_max_float - nudged_zero_point) * scale

    quant_zero = np.floor(-nudged_min * inv_scale + 0.5)
    # print(quant_min, quant_max, nudged_zero_point)
    # print(nudged_min, nudged_max, scale, inv_scale, quant_zero)
    clamped = np.clip(inputs, nudged_min, nudged_max)
    clamp_shifted = clamped - nudged_min
    # quant = np.clip(np.floor(clamp_shifted * inv_scale - quant_zero + 0.5),
    #                 quant_min - 2 ** (num_bits - 1), quant_max - 2 ** (num_bits - 1))
    quant = np.floor(clamp_shifted * inv_scale - quant_zero + 0.5)
    dequant = quant * scale
    return quant, dequant


if __name__ == '__main__':
    import numpy as np
    import tensorflow as tf
    np.random.seed(12345)
    data = np.random.uniform(-1, 1, (2,))
    data = np.r_[1, -1, data]

    d = fake_quant_with_min_max_args(data, -1, 1, 8, False)
    print(d[0])
    print(d[1])
    print(tf.quantization.fake_quant_with_min_max_args(data, -1, 1, 8, False))
```
```


### Relevant log output

_No response_