Matemática :: Round :: Feira

Distribuir erros de arredondamento
Baixe Agora

Matemática :: Round :: Feira Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • Perl Artistic License
  • Preço:
  • FREE
  • Nome do editor:
  • Marc Mims
  • Site do editor:
  • http://search.cpan.org/~mmims/

Matemática :: Round :: Feira Tag


Matemática :: Round :: Feira Descrição

Distribuir erros de arredondamento bastante Math :: :: redondo Fair é um módulo Perl que proporciona uma única, função exportada, round_fair, que atribui um valor inteiro, bastante distribuição de arredondamento rodadas errors.round_fair para cima, ou para baixo, de forma aleatória, onde a probabilidade de arredondamento é igual a fração de round. Por exemplo, round_fair será rodada de 0,5 a 1,0 com uma probabilidade de 0,5. Será rodada 0,3 a 1,03 de 10 vezes e a zero 7 de 10 vezes, em average.Consider o problema de distribuição de um produto indivisível, por exemplo uma moeda, em três contas uniformemente ponderadas, A, B, e C. usando uma abordagem ingênua, nenhuma das contas receberão uma alocação desde a parcela destinada a cada um é de 1/3 e 1/3 rodadas para zero. Ficamos com uma abordagem item.Another não alocado é ajustar a base em cada etapa. Começamos com um item para atribuir a 3 contas. 1/3 rodadas para 0, de modo a conta de um não recebe qualquer dotação, e nós deixá-lo de consideração. Agora, temos 2 contas e um item para alocar. 1/2 rodadas para 1, de modo que alocar 1 artigo para explicar B. Conta C não recebe destinação uma vez que não é nada para allocate.But o que acontece se alocar um item para o mesmo três contas 10.000 vezes? Idealmente, duas contas deve acabar com 3.333 itens e deve-se acabar com 3.334 items.Using a abordagem ingênua, todas as três contas não recebem destinação desde a cada rodada a alocação é 1/3 que arredonda para zero. Usando o segundo método, representam A e C representam receberá nenhuma atribuição, e conta B receberá uma atribuição total de 10.000 itens. Conta B sempre recebe o benefício dos erros de arredondamento usando o segundo method.round_fair usa um algoritmo com aleatoriedade para assegurar uma distribuição justa dos erros de arredondamento. No nosso exemplo problema, começamos com um item para alocar. Calculamos conta de ações de A, 1/3. Uma vez que é menos do que um artigo, nós dar-lhe uma chance de 1/3 de arredondamento para cima (e, portanto, a chance de arredondamento 2/3). Ele ganha a alocação de 1/3 do tempo. 2/3 do tempo que continuamos a B. Nós calcular a alocação de B como 1/2 (uma vez que existem apenas 2 contas restantes e um item para alocar). rodadas B até 02/01 de 2/3 (ou 1/3) do tempo e para baixo de 1/22/3 (ou 1/3) do tempo. Se nem A nem B arredonda para cima (o que ocorre 2/3 * 1/2, ou 1/3 do tempo), a alocação de C é calculado como 1/1, já que temos um item para alocar e apenas uma conta para alocá-lo para . Assim, 1/3 do tempo C recebe o benefício do erro de arredondamento. Nós nunca acabar com quaisquer items.This não alocados algoritmo funciona para qualquer número de allocations.round_fair ponderada ($ value, @weights) Retorna uma lista de valores inteiros que soma a $ value onde cada valor de retorno é uma parcela de US $ valor atribuído pelo os respectivos pesos em @weights. O número de valores de retorno é igual ao número de elementos em @weights $ valor deve ser um uso integer.SYNOPSIS Math :: Rodada :: Fair 'round_fair'; meus $ centavos = 7; meus @weights = (1, 2, 3, 2, 1); minha @allocation = round_fair ($ centavos, @weights); print "@allocation "; # Saída será um do seguinte: # 01 32 1 # 02 22 1 # 02 31 1 # 02 32 0 # 11 22 1 # 11 31 1 # 11 32 0 # 12 21 1 # 12 22 0 meu @total; para (1..900) {@allocation = round_fair ($ centavos, @weights); @total + = @allocation para 0 .. $ # alocação;} imprimir "@total "; # Saída será * perto * 700140021001400700, por exemplo .: # 698141120961418677 Requisitos: · Perl.


Matemática :: Round :: Feira Software Relacionado