tf.raw_ops.Round doesn't have a gradient
Hey @trickiwoo , 

Yes, rounding functions have a finite range and hence gradient zero. Although there are approximations available (refer [here](https://stackoverflow.com/questions/46596636/differentiable-round-function-in-tensorflow)), I don't think that's what documentation would be referring to. 

@sushreebarsa If you think this analysis is correct, please let me know. I will raise a PR correcting it @sushreebarsa the problem is we are registering gradient for round function in registry https://github.com/tensorflow/tensorflow/blob/f46ff5e9cfff71a4de98a8aac79d44df27df48f4/tensorflow/python/ops/math_grad.py#L1812 
And the logic to add documentation is whether a op is present in registry or not
https://github.com/tensorflow/tensorflow/blob/f46ff5e9cfff71a4de98a8aac79d44df27df48f4/tensorflow/tools/docs/generate2.py#L143 

Just need to be sure this is the only use case of registering gradients @trickiwoo Thank you for raising an issue!
Could you please refer to the comments above and let us know if you want these changes in the documentation?
@mayankagarwals Thank you for your response here. 

As per my understanding, some tf.Operations are registered as being non-differentiable and will return None. Others have no gradient registered.

The tf.raw_ops page shows which low-level ops have gradients registered.

If you attempt to take a gradient through a float op that has no gradient registered the tape will throw an error instead of silently returning None. This way you know something has gone wrong.

For example, the tf.image.adjust_contrast function wraps raw_ops.AdjustContrastv2, which could have a gradient but the gradient is not implemented.

Thank you! This issue is stale because it has been open for 7 days with no activity. It will be closed if no further activity occurs. Thank you. @sushreebarsa @mayankagarwals  Thank you for the comments! I didn't know that "has gradient" means "has gradient registered" but it can still be non-differentiable. I think it would be helpful to make it clear in the document, or even better, only mark the differentiable ops as "has gradient" (not sure if that can be done easily though).

Further, I wonder why register a `None` gradient (say for `round`) instead of don't register at all? In my understanding, it is better to throw an error for the non-differentiable operator, instead of silently returning None for the whole computation. Hi registering gradient to return None for `Round` to silently return None instead of throwing error when doing gradient computation.
```
@ops.RegisterGradient("Round") 
def _RoundGrad(_, unused_grad): 
    return [None]
``` This issue is stale because it has been open for 7 days with no activity. It will be closed if no further activity occurs. Thank you. This issue was closed because it has been inactive for 7 days since being marked as stale. Please reopen if you'd like to work on this further. Are you satisfied with the resolution of your issue?
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=Yes&entry.2137816233=https://github.com/tensorflow/tensorflow/issues/60093">Yes</a>
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=No&entry.2137816233=https://github.com/tensorflow/tensorflow/issues/60093">No</a>

<details><summary>Click to expand!</summary> 
 
 ### Issue Type

Documentation Bug

### Have you reproduced the bug with TF nightly?

Yes

### Source

source

### Tensorflow Version

2.11

### Custom Code

Yes

### OS Platform and Distribution

_No response_

### 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 Behaviour?

```shell
The function tf.raw_ops.Round does not have a gradient, however, it is mentioned in the documentation (https://www.tensorflow.org/api_docs/python/tf/raw_ops) that it does. Despite this inconsistency, the code operates correctly as intended.
```


### Standalone code to reproduce the issue

```shell
import os
import tensorflow as tf
import numpy as np

x = tf.Variable([1.5, -1.5], dtype=tf.dtypes.float64)

def rounding(x):

    round_op = tf.raw_ops.Round(x=x)
    return round_op

t1 = rounding(x)
with tf.GradientTape() as tape:
    tape.watch(x)
    t = rounding(x)

gradient = tape.gradient(t, x)
print(gradient)
```


### Relevant log output

```shell
None
```
</details>