Agregación log-sum-exp estable
Agrega hasta 1000 valores logarítmicos entre menos 1e300 y 1e300 restando su máximo antes de exponenciar.
from math import exp, fsum, log, inf
def log_sum_exp(values):
if type(values) not in (list, tuple) or len(values) > 1000:
raise ValueError("values.container")
values = tuple(values)
if len(values) > 1000 or any(
type(v) not in (int, float) or not -1e300 <= v <= 1e300 for v in values
):
raise ValueError("values.range")
if not values:
return -inf
peak = max(values)
return peak + log(fsum(exp(v - peak) for v in values))| Revisa antes de aplicar | Compara el comportamiento real con el resultado esperado. Si una prueba falla, investiga la causa antes de hacer más cambios. |
|---|---|
| Modelos | Configura un endpoint compatible con OpenAI o Anthropic usando la URL base y, si hace falta, una clave API. Prueba la conexión. Un servidor local debe estar en ejecución; las herramientas remotas pueden enviar datos por separado. |
| Proyecto | Comprueba entrada vacía, valores grandes repetidos y muy negativos, devolviendo infinito negativo solo para entrada vacía y rechazando booleanos, no finitos o fuera de rango. |
from math import exp, fsum, log, inf
def log_sum_exp(values):
if type(values) not in (list, tuple) or len(values) > 1000:
raise ValueError("values.container")
values = tuple(values)
if len(values) > 1000 or any(
type(v) not in (int, float) or not -1e300 <= v <= 1e300 for v in values
):
raise ValueError("values.range")
if not values:
return -inf
peak = max(values)
return peak + log(fsum(exp(v - peak) for v in values))Revisa el comportamiento numérico antes de confiar en el nuevo resultado
ExponQuay es un cliente de programación con IA para Windows destinado a desarrolladores que necesitan explicar un cambio numérico en el contexto de su aplicación. Lleva el código, una entrada problemática y el comportamiento esperado a la conversación del proyecto. Una primera solicitud útil pide al modelo conectado que separe la operación matemática prevista de las limitaciones de la implementación actual.
Por ejemplo, una tarea de agregación logarítmica puede especificar valores de entrada acotados, un tamaño máximo de colección y un resultado para la entrada vacía. Pide al modelo que examine un enfoque de desplazamiento por el máximo conservando ese contrato. Incluye el código llamador que consume la respuesta, especialmente si distingue un agregado vacío de un resultado numérico finito. La conversación sigue tratando del código de tu proyecto.
Antes de aceptar la propuesta, ejecuta casos con valores grandes repetidos y valores muy negativos en tu entorno. Comprueba el rechazo de tipos no admitidos y entradas fuera de rango además del resultado habitual. Compara con una referencia adecuada a la precisión que necesita tu aplicación. Un método destinado a mejorar la estabilidad también merece verificarse con la carga de trabajo a la que realmente servirá.
Elige un endpoint compatible con OpenAI o de Anthropic admitido por ExponQuay. Si allí hay modelos de IA sin filtros disponibles, puedes seleccionar uno con las credenciales necesarias. Su etiqueta no promete precisión matemática; las restricciones del modelo, los límites de contexto y la compatibilidad con herramientas dependen de la configuración real del endpoint y del modelo.
Preparar una revisión de agregación numérica
¿Qué debe acompañar a una entrada numérica problemática?
Incluye el intervalo esperado o resultado de referencia, los tipos de entrada aceptados y el tratamiento de salidas especiales por el código llamador. Estos datos permiten abordar las necesidades de la aplicación en vez de limitarse a sustituir una expresión por una fórmula matemáticamente similar.
¿Debe una entrada vacía devolver un número ordinario?
Sigue el contrato que especifiques. El ejemplo usa infinito negativo para un agregado vacío, algo que el consumidor debe entender. Revisa ese código llamador y prueba el caso vacío por separado de entradas muy negativas pero válidas antes de aceptar un cambio propuesto.
¿Por qué probar valores grandes repetidos?
Ejercitan un límite útil del enfoque de agregación analizado en este ejemplo de proyecto. Indica el comportamiento esperado y compara la implementación con una referencia adecuada. No infieras precisión numérica general a partir de un único caso ordinario que evita valores extremos.
¿Puede el modelo elegir una tolerancia de error aceptable?
Puede explicar las alternativas, pero los requisitos de tu aplicación determinan la tolerancia. Proporciona ese requisito y los tipos numéricos usados. Ejecuta la propuesta resultante con entradas representativas y tus propias herramientas y documenta los límites observados durante la revisión.
ExponQuay · Actualizado 2026-10-25