Velocidade de execução das funções ceil(),round(),floor() - página 7

 
Andrey Kisselyov:

Vamos tomar como exemplo:
se você mudar até mesmo o bitness da máquina, você muda para 64 bits e a precisão da máquina aumentou, sua fórmula deixará de funcionar, pois a precisão da máquina será muito maior do que você definiu em seu erro.

Com todo respeito.

P.S. pode haver outras opções onde sua fórmula falhará em uma gama de números. erro de ajuste constante de mudança para uma máquina diferente, ou mudanças no compilador, que você não é informado, ou quando você muda a representação dos números na máquina, ou de cortar uma parte fracionada do número ao compilar uma nova versão do terminal ... Você não sabe o que pode mudar, e não acho que seja uma boa idéia fazer um SE ou sofrer para adivinhar o que vai acontecer ao escrever um erro uma e outra vez...

Acho que isto é algo a se pensar.


Eu discordo. A fórmula(y=(int)(x+0,99999999999999999997);) não deixará de funcionar quando a precisão for aumentada, ela funcionará da mesma maneira. Como antes, o erro ocorrerá na faixa da parte fracional do número entre DBL_EPSILON (o valor atual: 0,00000000000002222204460492503131) e 0,0000000000000003. Mesmo que DBL_EPSILON diminua para zero (o que, é claro, não pode), a faixa aumentará pelo tamanho do DBL_EPSILON atual, ou seja, por 2,2204460492503131e-016. Acredito que se pode até ignorar tal faixa de erros.

E qual é o termo "precisão da máquina", de qualquer forma. Há precisões padronizadas como a dupla e outros tipos. Seu raciocínio não conta. Eu não direi nada sobre P.S.)) Tenho medo de ofender.

Com todo respeito.

 
Nikolai Semko:

Eu discordo. A fórmula(y=(int)(x+0,99999999999999999997);) não deixará de funcionar quando a precisão for aumentada, ela funcionará da mesma maneira. Como antes, o erro ocorrerá na faixa da parte fracional do número entre DBL_EPSILON (o valor atual: 0,00000000000002222204460492503131) e 0,0000000000000003. Mesmo que DBL_EPSILON diminua para zero (o que, é claro, não pode), a faixa aumentará pelo tamanho do DBL_EPSILON atual, ou seja, por 2,2204460492503131e-016. Acredito que se pode até ignorar tal faixa de erros.

E qual é o termo "precisão da máquina", de qualquer forma. Há precisões padronizadas como a dupla e outros tipos. Seu raciocínio não conta. Eu não direi nada sobre P.S.)) Tenho medo de ofender.

Respeitosamente.

Quando aplicado aos preços no mercado, você geralmente pode deixar a precisão em 5-6 dígitos, e como você está trabalhando em matemática e não sabe quem e o que eles precisarão de seu novo cálculo rápido, você deve aplicar o "princípio do comportamento tolo" de acordo com o qual não importa quem e quando pode colocar esse valor onde a função estará errada nos cálculos.

Respeite-se, qualquer um pode esfregar seu rosto na sujeira, vale a pena dar a um adversário uma razão para fazê-lo sendo rude? Todos nós evoluímos em algo, enquanto outras coisas simplesmente não são interessantes ou não são importantes para nós.
Já que estamos falando de assembler e o que você imagina que acontece com o código depois do compilador, vou lhe dizer algumas frases que você pode entender.

Como um processador tem um número limitado de bits em cada registro, adicionar e subtrair ou qualquer outra operação nesses registros tem alguns aspectos complicados quando se trata de bandeiras.
Como alguém que trabalhou em assembler, você deve entender do que estamos falando.
então me diga no comando ADD em diferentes modelos do processador se haverá um estouro, se você escrever código na linguagem de montagem usando o mesmo número em diferentes modelos e em geral ele não pode caber em nenhum registro e será truncado, de 8 bit última geração para 64 bit e mais geração atual e como ele pode mudar no futuro (o desenvolvimento tecnológico é tão passageiro, passou apenas 40 anos e já temos um processador multi-core em vez de uma lâmpada no início dos anos 80)?

meu respeito.
 
É melhor abrir o perfil e ver onde em seu código a execução é lenta, e obviamente não são funções matemáticas. A maioria são loops, todo tipo de consultas e assim por diante. funções matemáticas estão entre as mais rápidas e tentar cortar algo lá fora não é muito sensato na minha opinião.

Com todo respeito.
 
Nikolai Semko:

Muito bem, senhores, vocês já se manifestaram. Mudarei a função de tetos especialmente para você:

Esta variante é 25-50% mais lenta do que a variante:y=(int)(x+0,99999999999999999997); mas é maximamente correta, funciona para números inteiros negativos e é 3 vezes mais rápida do que o ceil(x).

Mas eu, como cidadão comum e fracassado, vou usar a variante com noves, porque considero todos os seus argumentos chatos e para mim, alguém que tem programado em assembler há muito tempo, e portanto sabe o que acontece com o código após a compilação, é demais - colocar cheques onde você pode passar sem eles.

Passar para personalidades tradicionalmente significa uma falta de argumentos sobre os méritos. Mas ainda assim lhe faço uma pergunta. O que o fez reduzir o tempo de um milhão de arredondamentos de 8 para 5 ou 2 milissegundos? Qual era a carga real no processador se mesmo tais atrasos se revelassem um gargalo? Não encontrei nenhuma dessas necessidades. Talvez seja algo abstrato, de interesse acadêmico?
 
Vladimir:
A personalização tem significado tradicionalmente uma falta de argumentos substantivos.

Concordo, assim como uma falta de comportamento cultural, numa tentativa de humilhar o interlocutor.

Respeitosamente.

 
Andrey Kisselyov:
Quanto ao "não crédito", não fiz uma avaliação de seus argumentos e não menosprezei seus méritos, como eu gostaria que fizesse. Respeite-se, esfregue seu rosto na sujeira pode qualquer um, seja para dar a seu oponente uma razão para fazê-lo, pedindo rudeza em suas ações? todos nós nos desenvolvemos em algo, e que simplesmente não estamos interessados ou irrelevantes para nós.
Vladimir:
Buscar personalidades tradicionalmente significa uma falta de argumentos sobre os méritos.
Andrey Kisselyov:

Concordo, assim como a falta de comportamento cultural na tentativa de humilhar o interlocutor.

Uau! certamente peço desculpas se ofendi alguém. Você deve ter ficado ofendido com o que eu disse:

Nikolai Semko:

Muito bem, senhores das honras, isso está resolvido. Estou mudando a função do teto só para você:

Mas eu mesmo, como plebeu e estudante de C, usarei a variante com noves, pois considero todos os seus argumentos nerd...

NikolaiSemko:

E qual é o termo "precisão da máquina", de qualquer forma. Há uma precisão padronizada como o dobro e outros tipos. Seu raciocínio não conta. Eu não direi nada sobre P.S.)) Tenho medo de ofender.

Bem, você sabe... Eu acho que você tem uma imaginação rica. Em comum brincadeira amigável você vê "transferência para a personalidade", "tentativa de humilhar o interlocutor", "menosprezo dos méritos" ...

Ou eu perdi alguma coisa, e em algum outro lugar eu ultrapassei os limites da decência?

Desculpe, Andrew, mas aparentemente eu não tenho conhecimento e experiência suficientes para entender o que você escreveu naquele P.S:

Andrey Kisselyov:
P.S. pode haver outras variantes, quando sua fórmula falhar em uma faixa de números. erro de ajuste constante devido à mudança para outra máquina, ou mudanças no compilador, sobre as quais você não é informado, ou mudanças na representação de números da máquina, ou corte departe fracionada do número ao compilar em novas versões do terminal... Não sei o que pode mudar, não acho uma boa idéia fazer SE ou sofrer para adivinhar o que vai acontecer prescrevendo um erro uma e outra vez...
Eu ficaria muito grato se alguém pudesse explicar o significado do que escrevi.
Mais uma vez, peço desculpas pelo meu tom. Eu sempre defendo o respeito mútuo entre colegas e um comportamento correto. O diabo está em minha mente.
 
Vladimir:
O que o levou a reduzir o tempo de arredondamento de 8 para 5 ou 2 milissegundos? Qual foi o verdadeiro fardo para o processador se mesmo tais atrasos provaram ser um gargalo? Não encontrei nenhuma dessas necessidades. Talvez seja algo abstrato, de interesse acadêmico?
Andrey Kisselyov:
É melhor abrir o perfil e ver em que ponto de seu código está atrasado, e obviamente não são funções matemáticas. A maioria são loops, várias consultas, etc. As funções matemáticas estão entre as mais rápidas e tentar cortar algo lá fora não é muito inteligente, eu acho.
Eu não sei por que você acha que sou lento. Pelo contrário, eu acho que meus algoritmos são os mais rápidos. Eu sou apenas um pouco doido por velocidade. É claro que a utilização de uma função alternativa de arredondamento tão eficiente proporciona muito pouco ganho, apenas frações de um por cento. Mas, como diz o ditado, do mundo em geral. Este também é o caso, por exemplo, da ciência aeronáutica e de foguetes. Na luta para reduzir o peso sem comprometer a força, tudo é modificado, até mesmo os parafusos. Talvez essa seja uma das razões pelas quais, ao contrário da lógica, atualmente os aviões são o meio de transporte mais seguro.
 
Nikolai Semko:

Uau! certamente peço desculpas se ofendi alguém. Você deve ter ficado ofendido com o que eu disse:

Bem, você sabe... Acho que você tem uma imaginação vívida. Em uma simples brincadeira amigável você vê "personalidades", "tentativas de humilhar", "depreciar"...

Se você se permite 'Ridicularizar' seus amigos, não tem amigos, tem palhaços ao seu redor dos quais você às vezes ri e não valoriza a amizade e a opinião deles.

Nikolai Semko:

Ou eu perdi alguma coisa, e em algum outro lugar eu ultrapassei os limites da decência?

Eu não sou seu amigo, irmão ou mesmo pessoa próxima para que você possa lhe dar algum tipo de avaliação, ainda mais PUBLICAMENTE.

Nikolai Semko:
Desculpe, Andriy, mas aparentemente não tenho conhecimento e experiência suficientes para entender o que você escreveu naquele P.S.: eu ficaria muito grato se alguém pudesse me explicar o significado do que você escreveu.

O significado do que está escrito em P.S., que você não pode entender por alguma razão é óbvio, você não sabe como a técnica que você usa suas fórmulas rápidas se desenvolverá, você não sabe como a plataforma se desenvolverá, você não sabe o que será posteriormente adicionado ao compilador e como os números serão representados no espaço de registros do processador, você não sabe nada sobre isso e introduzir uma constante, dizendo que ela resolverá tudo positivamente e sempre, por assim dizer, é, por assim dizer, uma ilusão.

Se você levar em conta que sua fórmula será levada por outras pessoas do fórum e pode colocá-la em C ou Pascal ou algo assim, você precisa levar em conta estes pontos também, a matemática não tem limites nem na plataforma nem na linguagem de programação.

Nikolai Semko:
Mais uma vez, peço desculpas pelo meu tom. Eu sempre defendo o respeito mútuo entre colegas e a correção do comportamento. Eu estava fora da linha.

desculpas aceitas. não cometa os mesmos erros novamente, caso contrário, suas palavras não terão sentido.

Respeitosamente.

 
Nikolai Semko:
Não sei o que o faz pensar que sou lento. Pelo contrário, eu acho que meus algoritmos são os mais rápidos. Eu sou apenas um pouco doido por velocidade. É claro que a utilização de uma função alternativa de arredondamento tão eficiente proporciona muito pouco ganho, apenas frações de um por cento. Mas, como diz o ditado, do mundo em geral. Este também é o caso, por exemplo, da ciência aeronáutica e de foguetes. Na luta para reduzir o peso sem comprometer a força, tudo é modificado, até mesmo os parafusos. Talvez essa seja uma das razões pelas quais hoje os aviões são o meio de transporte mais seguro, ao contrário da lógica.
Sou a favor de uma abordagem sensata da programação, onde você pode acelerar não contra a lógica, é melhor fazê-lo, mas qualquer "doença" precisa ser tratada, pois é uma aberração de um modo de vida saudável.

Com todo respeito.
 
Andrey Kisselyov:

Se você se permitir "ESTUDAR" seus amigos, você não tem amigos, tem palhaços ao seu redor dos quais você às vezes goza e não valoriza a amizade e opinião deles.

Parece que Nikolai estava certo sobre os nerds ))

Pessoalmente, não vi nenhuma referência pessoal lá. E você tem muitas cartas em seus postos, mas tudo está fora de tópico e você parece estar discutindo apenas para discutir.