--- name: percentile_int64 kind: function lang: go domain: datascience version: "1.0.0" purity: pure signature: "func Percentile(sorted []int64, p float64) int64" description: "Calcula el percentil p (0.0-1.0) de un slice de int64 pre-ordenado ascendente. Retorna 0 para slice vacio. idx = int(float64(len-1)*p), clamped a [0, len-1]." tags: [statistics, percentile, quantile, int64, sorted] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "" imports: [] params: - name: sorted desc: "Slice de int64 pre-ordenado en orden ascendente. No se reordena internamente." - name: p desc: "Percentil a calcular, en rango [0.0, 1.0]. 0.5 = mediana, 0.9 = P90, 0.99 = P99." output: "El valor en la posicion del percentil p dentro del slice. Retorna 0 si el slice esta vacio." tested: true tests: - "slice vacio retorna cero" - "un solo elemento retorna ese elemento" - "p0 retorna minimo" - "p100 retorna maximo" - "p50 retorna mediana de cinco elementos" - "p90 de diez elementos usa idx int truncado" - "p99 de slice pequeno usa idx truncado a cero" test_file_path: "functions/datascience/percentile_int64_test.go" file_path: "functions/datascience/percentile_int64.go" source_repo: "https://github.com/egutierrez/fn_registry/apps/kanban" source_license: "private" source_file: "apps/kanban/backend/metrics.go" --- ## Ejemplo ```go sorted := []int64{10, 20, 30, 40, 50} p50 := Percentile(sorted, 0.5) // 30 p90 := Percentile(sorted, 0.9) // 50 p99 := Percentile(sorted, 0.99) // 50 ``` ## Notas El input debe estar ordenado ascendente antes de llamar a esta funcion. `DurationStatsFrom` se encarga de ordenar antes de llamarla. Extraido de `apps/kanban/backend/metrics.go:99-111`.