Fix for issue #57268 - ENH: Preserve input start/end type in interval…
…_range

- [ ] closes #57268 
- [ ] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

> ew note in `v3.0.0.rst` and a unit test.
> 
> Also could you fix this for float types too?

Can you give me an example for float type with expected results? Thank you! I have added my implementations for supporting float types. But I see in base.py that pandas doesn't support float16 data types. Should I convert them to float64 or just let pandas thow Exception?

base.py:
```python3
elif dtype == np.float16:
    # float16 not supported (no indexing engine)
    raise NotImplementedError("float16 indexes are not supported")
```

For example:

```python3
interval_index_float = pd.interval_range(start=np.float32(0.0), end=np.float32(0.6), freq=0.5, closed="left")
print(interval_index_float)
```

Gives:

```
IntervalIndex([[0.0, 0.5)], dtype='interval[float32, left]')
```

But:

```python3
interval_index_float = pd.interval_range(start=np.float16(0.0), end=np.float16(0.6), freq=0.5, closed="left")
print(interval_index_float)
```

will raise:

`NotImplementedError: float16 indexes are not supported`

I have added implementation to ignore float16 like this and checked-in my changes. If you want to let it throw an exception let me know!

My implementation:

```python3
if isinstance(start, float | np.float16) or isinstance(
                end, float | np.float16
            ):
    dtype = np.dtype("float64")
else:
    dtype = start.dtype if start.dtype == end.dtype else np.dtype("float64")
breaks = np.arange(start, end + (freq * 0.1), freq, dtype=dtype)
```

Current implementation safely returns float64 if it finds float16, Just like current main release!

 Changes have been completed as you asked! Thanks @VISWESWARAN1998  You are most welcome @mroeschke !