tf.truncatemod does not support half and bfloat16 data type
Same issue applies for tf.math.igamma, which also is claimed to accept bfloat and half tensor but it does not in practical. Hi @drewshark ,

I can confirm the Op `TruncateMod` registered for {int32, int64, bfloat16, half, float, double} dtypes. I checked with CPU the Op works fine except for `half` and `bfloat16`. Attached [gist](https://colab.sandbox.google.com/gist/SuryanarayanaY/bfdde4e69b4ef916bf583530793b07ca/62070_cpu.ipynb) for reference.

But some kernels has not been built due to unknown reasons. We will have a look into it and confirm whether it is omitted for some reason. If not maybe we can built kernels for same to fix it.

Thank you.
### Issue type

Bug

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

Yes

### Source

binary

### TensorFlow version

2.14.0

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

Following the documentation (https://www.tensorflow.org/api_docs/python/tf/truncatemod) tf.truncatemod supports the half and bfloat16 data type but in practical it does not.

### Standalone code to reproduce the issue

```shell
import tensorflow as tf
import numpy as np
import warnings
warnings.filterwarnings("ignore")
x = tf.constant(np.random.rand(2,2), dtype='half')
y = tf.constant(np.random.randint(0, 100, ()), dtype='half')
out = tf.truncatemod(x,y)  # crash
print(out)


import tensorflow as tf
import numpy as np
import warnings
warnings.filterwarnings("ignore")
x = tf.constant(np.random.rand(2,2), dtype='bfloat16')
y = tf.constant(np.random.randint(0, 100, ()), dtype='bfloat16')
out = tf.truncatemod(x,y)  # crash
print(out)
```


### Relevant log output

```shell
NotFoundError: Could not find device for node: {{node TruncateMod}} = TruncateMod[T=DT_BFLOAT16]
All kernels registered for op TruncateMod:
  device='XLA_CPU_JIT'; T in [DT_FLOAT, DT_DOUBLE, DT_INT32, DT_INT64, DT_BFLOAT16, DT_HALF]
  device='XLA_GPU_JIT'; T in [DT_FLOAT, DT_DOUBLE, DT_INT32, DT_INT64, DT_BFLOAT16, DT_HALF]
  device='DEFAULT'; T in [DT_INT32]
  device='GPU'; T in [DT_INT32]
  device='CPU'; T in [DT_DOUBLE]
  device='CPU'; T in [DT_FLOAT]
  device='CPU'; T in [DT_INT64]
  device='CPU'; T in [DT_INT32]
 [Op:TruncateMod] name: 

NotFoundError: Could not find device for node: {{node TruncateMod}} = TruncateMod[T=DT_HALF]
All kernels registered for op TruncateMod:
  device='XLA_CPU_JIT'; T in [DT_FLOAT, DT_DOUBLE, DT_INT32, DT_INT64, DT_BFLOAT16, DT_HALF]
  device='XLA_GPU_JIT'; T in [DT_FLOAT, DT_DOUBLE, DT_INT32, DT_INT64, DT_BFLOAT16, DT_HALF]
  device='DEFAULT'; T in [DT_INT32]
  device='GPU'; T in [DT_INT32]
  device='CPU'; T in [DT_DOUBLE]
  device='CPU'; T in [DT_FLOAT]
  device='CPU'; T in [DT_INT64]
  device='CPU'; T in [DT_INT32]
 [Op:TruncateMod] name:
```
