BisectingKMeans floating point exception fatal error on OSX

### Describe the bug

Hi, thanks for this fantastic library 🚀 🎉 

I believe I found a bug. In the BisectingKMeans clustering, the `predict` function cannot be used when the to-be-predicted-data is on a different numerical scale than the fitted data. Other clustering methods like e.g., KMeans dont have this problem.

In the example below, I fitted the BisectingKMeans on random data and then multiplied the data that should be predicted by 50. It causes a floating point exception error which is pretty bad because python silently exits.

### Steps/Code to Reproduce

```py
from sklearn.cluster import BisectingKMeans, KMeans
import numpy as np
x = np.random.rand(3000, 10)

bisect_means = BisectingKMeans(n_clusters=10).fit(x)

labels = bisect_means.predict(50*np.random.rand(100, 10))
print(labels)
```

### Expected Results

A list of predicted class labels

### Actual Results

Python silently exits with:
```
[1]    45074 floating point exception  python foo.py
```
In Jupyter/ipython the kernel simply dies.

### Versions

```shell
System:
    python: 3.9.16 (main, Mar  8 2023, 04:29:44)  [Clang 14.0.6 ]
executable: /Users/jab/miniconda3/envs/qondot/bin/python
   machine: macOS-10.16-x86_64-i386-64bit

Python dependencies:
      sklearn: 1.3.0
          pip: 23.0.1
   setuptools: 67.8.0
        numpy: 1.21.6
        scipy: 1.10.1
       Cython: 0.29.35
       pandas: 1.5.3
   matplotlib: 3.7.1
       joblib: 1.2.0
threadpoolctl: 3.1.0

Built with OpenMP: True

threadpoolctl info:
       user_api: openmp
   internal_api: openmp
         prefix: libomp
       filepath: /Users/jab/miniconda3/envs/qondot/lib/python3.9/site-packages/sklearn/.dylibs/libomp.dylib
        version: None
    num_threads: 8

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /Users/jab/miniconda3/envs/qondot/lib/python3.9/site-packages/numpy/.dylibs/libopenblas.0.dylib
        version: 0.3.17
threading_layer: pthreads
   architecture: Haswell
    num_threads: 4

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /Users/jab/miniconda3/envs/qondot/lib/python3.9/site-packages/scipy/.dylibs/libopenblas.0.dylib
        version: 0.3.18
threading_layer: pthreads
   architecture: SkylakeX
    num_threads: 4
```

COMMENT:
Ok when rebuilding from source and running the repro under lldb I can actually trigger an informative Python exception:

```python
(lldb) r
Process 766 launched: '/Users/ogrisel/mambaforge/envs/dev/bin/python' (arm64)
Traceback (most recent call last):
  File "/Users/ogrisel/tmp/repro.py", line 7, in <module>
    labels = bisect_means.predict(50*np.random.rand(100, 10))
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ogrisel/code/scikit-learn/sklearn/cluster/_bisect_k_means.py", line 471, in predict
    labels = self._predict_recursive(X, sample_weight, self._bisecting_tree)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ogrisel/code/scikit-learn/sklearn/cluster/_bisect_k_means.py", line 516, in _predict_recursive
    labels[mask] = self._predict_recursive(
                   ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ogrisel/code/scikit-learn/sklearn/cluster/_bisect_k_means.py", line 504, in _predict_recursive
    cluster_labels = _labels_inertia_threadpool_limit(
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ogrisel/code/scikit-learn/sklearn/cluster/_kmeans.py", line 820, in _labels_inertia_threadpool_limit
    result = _labels_inertia(X, sample_weight, centers, n_threads, return_inertia)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/ogrisel/code/scikit-learn/sklearn/cluster/_kmeans.py", line 796, in _labels_inertia
    _labels(
  File "sklearn/cluster/_k_means_lloyd.pyx", line 88, in sklearn.cluster._k_means_lloyd.lloyd_iter_chunked_dense
    int n_chunks = n_samples // n_samples_chunk

ZeroDivisionError: integer division or modulo by zero
```

I have not idea why it does not show up when running the repro script outside of lldb...

I think I found the cause of the bug.

Labels: Bug, Needs Triage