Agregação log-sum-exp estável
Agregue até 1000 valores logarítmicos de menos 1e300 até 1e300 subtraindo o máximo antes da exponenciação.
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))| Revise antes de aplicar | Compare o comportamento real com o resultado esperado. Se uma verificação falhar, investigue a causa antes de fazer outras alterações. |
|---|---|
| Modelos | Configure um endpoint compatível com OpenAI ou Anthropic com a URL base e uma chave API, quando necessária. Teste a conexão. O servidor local precisa estar em execução; ferramentas remotas podem transmitir dados separadamente. |
| Projeto | Teste entrada vazia, valores grandes repetidos e muito negativos, retornando infinito negativo apenas para entrada vazia e rejeitando itens booleanos, não finitos ou fora da faixa. |
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))Revise o comportamento numérico antes de confiar no novo resultado
ExponQuay é um cliente de programação com IA para Windows destinado a desenvolvedores que precisam de uma mudança numérica explicada no contexto da aplicação. Traga o código-fonte, uma entrada problemática e o comportamento esperado para a conversa do projeto. Uma primeira solicitação útil pede ao modelo conectado que separe a operação matemática pretendida das limitações da implementação atual.
Por exemplo, uma tarefa de agregação logarítmica pode especificar valores de entrada limitados, um tamanho máximo de coleção e um resultado para entrada vazia. Peça ao modelo que examine uma abordagem de deslocamento pelo máximo preservando esse contrato. Inclua o código chamador que consome a resposta, principalmente se ele diferencia uma agregação vazia de um resultado numérico finito. A discussão continua sendo sobre o código do seu projeto.
Antes de aceitar a proposta, execute casos com valores grandes repetidos e valores muito negativos no seu ambiente. Confira a rejeição de tipos não suportados e entradas fora do intervalo, além do resultado comum. Compare com uma referência adequada à precisão de que a aplicação precisa. Um método destinado a melhorar a estabilidade ainda merece verificação com a carga de trabalho que efetivamente atenderá.
Escolha um endpoint compatível com OpenAI ou da Anthropic suportado pelo ExponQuay. Se houver modelos de IA sem filtros disponíveis nele, você poderá selecionar um com as credenciais exigidas. Seu rótulo não promete precisão matemática; restrições do modelo, limites de contexto e suporte a ferramentas dependem do endpoint real e da configuração do modelo.
Preparando uma revisão de agregação numérica
O que deve acompanhar uma entrada numérica problemática?
Inclua o intervalo esperado ou resultado de referência, os tipos de entrada aceitos e o tratamento de saídas especiais pelo código chamador. Esses fatos permitem que a conversa trate das necessidades da aplicação em vez de simplesmente substituir uma expressão por uma fórmula matematicamente semelhante.
Uma entrada vazia deve retornar um número comum?
Siga o contrato que você especificar. O exemplo usa infinito negativo para uma agregação vazia, o que o consumidor precisa entender. Revise esse código chamador e teste o caso vazio separadamente de entradas muito negativas, mas válidas, antes de aceitar uma alteração proposta.
Por que testar valores grandes repetidos?
Eles exercitam um limite útil para a abordagem de agregação discutida neste exemplo de projeto. Informe o comportamento esperado e compare a implementação com uma referência adequada. Não deduza precisão numérica geral de um único caso comum que evite valores extremos.
O modelo pode escolher uma tolerância de erro aceitável?
Ele pode explicar vantagens e desvantagens, mas os requisitos da aplicação determinam a tolerância. Forneça esse requisito e os tipos numéricos usados. Execute a proposta resultante com entradas representativas usando suas próprias ferramentas e documente os limites observados durante a revisão.
ExponQuay · Atualizado 2026-10-25