Pergunta

Eu estou trabalhando em um aplicativo que terá de lidar com números muito grandes.

Eu verifiquei algumas aulas disponíveis LargeNumber e encontraram alguns que eu estou feliz com ele. Eu tenho uma classe para grandes números inteiros e de números de ponto flutuante de grande porte.

Uma vez que alguns dos números serão pequenos e alguns grandes a questão é se vale a pena verificar o comprimento do número e, se for o uso pequeno a C # int regular ou dupla e se é é grande uso das outras classes que tenho ou se eu já estou usando as grandes classes grandes Float inteiros e eu deveria ficar com eles, mesmo para números menores.

A minha consideração é puramente desempenho. Will I economizar tempo suficiente na matemática para os números menores que seria útil para verificar cada número após se é colocado em.

Foi útil?

Solução

Realmente difícil dizer - depende de suas bibliotecas 3o partido:)

A melhor aposta seria a de usar a classe System.Diagnostics.Stopwatch, fazer um gazzillion cálculos diferentes, o tempo deles e comparar os resultados, eu acho ..

[EDIT] - Sobre os benchmarks, eu faria uma série de benchmarks seu tipo de largeInt fazer os cálculos sobre regulares 32/64 número de bits, e uma série verificando se o número pode caber na regulares Int32 / Int64 tipos (que deve ser), "downcasting"-los a esses tipos, e depois executar os mesmos cálculos que utilizam estes tipos. Da sua pergunta, isso soa como o que você vai fazer se o built-in tipos são mais rápidos ..

Se o seu pedido for alvejado por mais pessoas do que a si mesmo, tente executá-los em máquinas diferentes (single core, multicore, de 32 bits, plataformas de 64 bits), e se a plataforma parece ter um grande impacto no tempo os cálculos tomar, usar algum tipo de estratégia de padrão para fazer os cálculos de forma diferente em diferentes máquinas.

Boa sorte:)

Outras dicas

Eu esperaria que uma decente biblioteca grande número seria capaz de fazer essa otimização, por si própria ...

Eu diria que sim, a verificação será mais do que pagar por si mesmo, contanto que você tem valores suficientes dentro do intervalo regular.

A lógica é simples: um complemento inteiro é uma instrução de montagem. Combinado com uma comparação, que é três ou quatro instruções. Qualquer implementação de tal operação de software provavelmente vai ser muito mais lento.

O ideal, essa verificação deve ser feita nas próprias bibliotecas LargeNumber. Se eles não fazê-lo, você pode precisar de um invólucro para evitar ter cheques em todo o lugar. Mas então você precisa pensar no custo adicional da embalagem também.

trabalhou em um projeto onde os mesmos campos necessária para lidar com números muito grandes e, ao mesmo precisão Handels tempo para números muito pequenos.
O acabamos com armazenar a campos (mantissa e expoente) para cada número desse tipo.
Fizemos uma classe para cálculos mantissa / expoente e um bom desempenho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top