| 466 | } |
| 467 | |
| 468 | void cbm_sem_normalize(cbm_sem_vec_t *v) { |
| 469 | if (!v) { |
| 470 | return; |
| 471 | } |
| 472 | float mag = 0.0F; |
| 473 | for (int i = 0; i < CBM_SEM_DIM; i++) { |
| 474 | mag += v->v[i] * v->v[i]; |
| 475 | } |
| 476 | mag = sqrtf(mag); |
| 477 | if (mag < CBM_SEM_DENOM_EPS) { |
| 478 | return; |
| 479 | } |
| 480 | float inv = CBM_SEM_UNIT_POS / mag; |
| 481 | for (int i = 0; i < CBM_SEM_DIM; i++) { |
| 482 | v->v[i] *= inv; |
| 483 | } |
| 484 | } |
| 485 | |
| 486 | void cbm_sem_vec_add_scaled(cbm_sem_vec_t *dst, const cbm_sem_vec_t *src, float scale) { |
| 487 | if (!dst || !src) { |
no outgoing calls
no test coverage detected