Preciso usar a função RANDBETWEEN do Microsoft Excel e estou ciente de que um novo conjunto de números aleatórios é gerado sempre que você faz qualquer outra coisa em qualquer lugar da planilha. Também estou ciente das soluções alternativas para "congelar" um conjunto de números aleatórios que foi gerado, por exemplo, para classificar n listas de números aleatórios entre a e b. Minha pergunta é a seguinte: POR QUE os números aleatórios gerados mudam? Existe algo no algoritmo que precise disso? O FWIW, o Google Sheets, o LibreOffice Calc e o Apple Numbers exibem o mesmo comportamento.
microsoft-excel
nowradioguy
fonte
fonte
Respostas:
Charles Williams tem uma boa explicação de como o Excel calcula as coisas e por quê.
http://www.decisionmodels.com/calcsecretsi.htm
Em essência, se uma pasta de trabalho contiver funções voláteis (consulte a lista de Charles, uma vez que a função volátil mudou ao longo dos anos com diferentes versões do Excel), um recálculo inteiro da pasta de trabalho será acionado quando qualquer célula da pasta de trabalho for alterada (se o Excel está definido como cálculo automático). Se não houver funções voláteis na pasta de trabalho, apenas as células afetadas pela última alteração serão recalculadas.
Outros aqui declararam que o cálculo automático sempre calculará tudo na pasta de trabalho quando qualquer célula for alterada, mas isso está errado. Somente funções voláteis causam o recálculo automático de todas as células na pasta de trabalho. Sem funções voláteis, o Excel recalcula apenas o que precisa ser recalculado.
É por isso que pessoas como eu, que conhecem a diferença, recomendam fortemente evitar funções voláteis como OFFSET () ou INDIRECT () nas células da planilha, se possível, pois o soro de leite diminui a velocidade da pasta de trabalho, causando um recálculo completo após cada alteração de célula. Aprender a usar INDEX () em vez de OFFSET () pode resultar em melhorias drásticas na velocidade, porque o Index não é volátil (consulte o artigo de Charles para obter mais detalhes).
O mecanismo de cálculo do Excel é baseado na filosofia "recalcular ou morrer" que diferencia o Excel dos produtos concorrentes quando ele estava em desenvolvimento. Confira este artigo: https://www.geekwire.com/2015/recalc-or-die-30-years-later-microsoft-excel-1-0-vets-recount-a-project-that-defied-the -odds /
fonte
Outras respostas se concentram na mecânica do recálculo e no papel das funções voláteis, mas acho que isso deixa de lado parte da essência da questão. Ele aborda as regras que foram empregadas, mas não tanto o "porquê". Vou me concentrar nisso.
Conceito de design
Deixe-me começar com um conceito de design e os blocos de construção das planilhas mais modernas. Há uma "divisão de responsabilidade". Funções são rotinas dedicadas que executam uma tarefa específica e fazem isso toda vez que são solicitadas. Além disso, o aplicativo de planilha controla quando solicitado.
As funções, por si só, não contêm lógica para escolher recalcular ou não recalcular. A natureza de todas as funções do Excel é executar algum tipo de operação sempre que acionada. Nenhuma função possui sua própria "memória" de seu valor atual ou um histórico de seus cálculos anteriores. Não há como saber se esta é a primeira vez que lhe pedem para fazer seu trabalho. Portanto, nenhuma função nativa tem a capacidade de executar apenas uma vez. Se qualquer função for recalculada, ela fará o que foi projetada e produzirá um novo valor.
O aplicativo de planilha contém alguma inteligência que permite economizar tempo ignorando recálculos desnecessários (conforme descrito na resposta de teylyn). O único momento em que o recálculo é ignorado é se o aplicativo souber que o valor da função não foi afetado pelas alterações na planilha que acionaram a necessidade de recalcular as coisas.
E se você precisar executar uma função uma vez e preservar seu valor? Tome o seu exemplo de produção de um número aleatório e depois o resultado não será alterado. Isso descreve a criação de constantes geradas aleatoriamente e você pode fazer isso com o Excel.
O Excel não pode saber como você deseja usar seus recursos; se você deseja continuar produzindo novos valores ou preservar o último conjunto. Cada opção é um caso de uso que o Excel suporta. O Excel acomoda os dois casos, fornecendo as ferramentas para calcular novos valores e as ferramentas para preservar valores antigos. Você pode construir o que quiser. Mas o usuário tem a responsabilidade de fazê-lo fazer o que deseja.
Função Lógica
Então, vamos olhar para a lógica do que a função faz. Será que faz sentido que a lógica do recálculo pule uma função aleatória porque seu valor não deve ser afetado por outras alterações na planilha?
A mudança ou não do valor de uma função após o recálculo depende de sua finalidade e em que ela se baseia. Um cálculo em valores constantes sempre produzirá o mesmo resultado. Uma operação baseada nos valores das células que não foram alteradas produzirá o mesmo resultado.
No entanto, algumas funções são projetadas com a intenção e o objetivo de produzir um resultado diferente a cada vez. Considere, por exemplo, funções baseadas no horário atual. Eles produzirão um novo resultado com base no tempo no recálculo. Você não pode ter uma função cujo objetivo seja produzir um valor com base no horário atual e não atualizar quando for recalculado.
O objetivo do controle de recálculo é sempre fazer com que tudo reflita o estado atual das coisas quando o recálculo é acionado. Esse critério não seria atendido se as funções baseadas no horário atual não fossem atualizadas.
As funções "aleatórias", como RANDBETWEEN, têm o objetivo de produzir um novo número aleatório quando recalculadas. É isso que eles pretendem fazer. Você pode argumentar que o recálculo pode ser ignorado porque o valor não deve ser afetado por outras coisas acontecendo na planilha.
Se esse fosse o comportamento padrão, você estaria atualizando a planilha, mas o valor aleatório permaneceria constante. Esse não é um comportamento muito aleatório. Isso suportaria um caso de uso, mas não o outro. Voltando ao conceito básico de design, ele é tratado como qualquer outra função. O comportamento padrão é fazer com que o Excel o recalcule. Se você deseja preservar o valor anterior para seu caso de uso, é sua responsabilidade fazer isso com as ferramentas disponíveis.
fonte
Toda alteração na planilha inicia o recálculo automático de todas as fórmulas, que é o comportamento padrão.
Você pode desativá-lo ou congelar o valor real convertendo-o em valor puro (como o oposto de uma fórmula).
fonte
É classificada como uma fórmula "volátil" e, como tal, faz parte da lista de funções recalculadas quando uma alteração é detectada ou uma nova função é inserida.
Outra opção a considerar é alternar a planilha para o cálculo manual, para que você controle quando isso acontecer - apenas lembre-se de recalcular, pois qualquer alteração nos valores ou fórmulas não causará um recalculado ...
fonte
Apesar dos esforços heróicos para fazer com que isso pareça um recurso e não um bug, acho extremamente improvável que esse comportamento seja rotineiramente vantajoso. "Recursos" facilitam nossa vida, "bugs" dificultam. No meu caso, inserir um rótulo ou explicação em uma célula que não é referenciada por nenhuma outra célula causa uma nova randomização que é inconveniente de se lidar. Eu chamaria isso de "bug".
Sim, eu posso controlar o recálculo manualmente (uma dor) ou colar valores para evitá-la (novamente, uma dor), mas em que casos a re-randomização causada pela entrada de texto em uma região remota da folha facilita a vida?
Mesmo se houver alguma lógica por trás do manuseio de funções "voláteis", pareceria trivialmente fácil acionar o recálculo por meio de critérios apropriados, além de simplesmente pressionar "enter" após a entrada de texto em células não relacionadas e não referenciadas ou por outras edições completamente não relacionadas. Impedir que esse seja o padrão e não consigo imaginar que seria difícil de implementar. Se alguém quiser esse "recurso", poderá ativá-lo, mas não consigo imaginar quando isso seria uma coisa boa. Na melhor das hipóteses, pode ser relativamente inofensivo. Para mim, é um grande aborrecimento por causa do tipo de folha que estou criando.
Por fim - O Analysis Toolpak permite criar distribuições de números aleatórios de várias maneiras, e os intervalos de números criados não recalculam (randômico), a menos que você o solicite. Portanto, recomendo que as pessoas usem o Analysis ToolPak quando ele atender às suas necessidades.
fonte