O que me incomoda é que quando calculo um número fracionário, o normalizo, o escrevo em uma variável, depois o leio e o normalizo novamente, recebo caudas
Já escrevi, vou repetir - alguns números não existem em binário. Não há 0,1, não há 0,3 e muitos outros. Não importa quantas vezes você escreva o dobro val = NormalizeDouble(0,1434, 1), você nunca receberá 0,1 só porque não existe tal número.
Por exemplo, os números são representados da seguinte forma:
Se isto for muito perturbador, você precisa arredondar ou escrever sua própria bicicleta para representar números fracionários (pode haver algumas bibliotecas, não interessadas) que não usarão o fpu.
E não são adicionados rabos durante a conversão em cordel, eles estão lá inicialmente.
Acho que você está enganando o homem. O que você quer dizer com "não há rabos após a normalização"? Não pode haver caudas somente na corda que recebemos de um número e arredondamos o valor (arredondado já na corda, não em dobro). Mas há caudas após a NormalizeDouble().
Acho que você está enganando o homem. O que você quer dizer com "não há rabos após a normalização"? Não pode haver caudas somente na corda que recebemos de um número e arredondamos o valor (arredondado já na corda, não em dobro). Mas depois de NormalizeDouble() há caudas.
Bem, se você gosta de acreditar que eu estou enganando alguém, acredite em mim. Já vi todo tipo de pessoas aqui, não me surpreenderei com sua posição "de princípio".
O que me incomoda é que quando calculo um número fracionário, o normalizo, o escrevo em uma variável, depois o leio e o normalizo novamente, recebo caudas
por exemplo
basis[0]=NormalizeDouble(sum_A,2);
GlobalVariableSet("Equity-"+portfolio_id,basis[0]);
...
current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);
text = "Positions synchronized at " + current + " for portfolio: " + portfolio_name;
if(!automatic) MessageBox(text,""); else Print(text);
Agora eu mudei para
text = "Positions synchronized at " + DoubleToStr(current,2) + " for portfolio: " + portfolio_name;
if(!automatic) MessageBox(text,""); else Print(text);
e não parece haver caudas, ufa, ufa, ufa...
Já escrevi, vou repetir - alguns números não existem em binário. Não há 0,1, não há 0,3 e muitos outros. Não importa quantas vezes você escreva o dobro val = NormalizeDouble(0,1434, 1), você nunca receberá 0,1 só porque não existe tal número.
Por exemplo, os números são representados da seguinte forma:
0,1 = 0,100000000000000000001
0,2 = 0,20000000000000001
0,3 = 0,2999999999999999999999999
0,4 = 0,40000000000000000000002
0,6 = 0,59999999999999999999998
mas
0,125 = 0,125
0,25 = 0,25
0,5 = 0,5
Se isto for muito perturbador, você precisa arredondar ou escrever sua própria bicicleta para representar números fracionários (pode haver algumas bibliotecas, não interessadas) que não usarão o fpu.
E não são adicionados rabos durante a conversão em cordel, eles estão lá inicialmente.
por isso resolvi minha pergunta, podemos encerrar o assunto
solução: você tem que forçar o arredondamento, mesmo após a normalização
muito possivelmente... mas em termos do resultado final - há caudas!
...
Não há caudas após a normalização.
Acho que você está enganando o homem. O que você quer dizer com "não há rabos após a normalização"? Não pode haver caudas somente na corda que recebemos de um número e arredondamos o valor (arredondado já na corda, não em dobro). Mas há caudas após a NormalizeDouble().
Solução errada. Ao arredondar, você tem que multiplicar, arredondar, dividir. Após a última divisão, o número será não-normalizado.
O que você quer dizer com "normalização"? Stringo estava dizendo aqui que o algoritmo é algo assim:
Acho que você está enganando o homem. O que você quer dizer com "não há rabos após a normalização"? Não pode haver caudas somente na corda que recebemos de um número e arredondamos o valor (arredondado já na corda, não em dobro). Mas depois de NormalizeDouble() há caudas.
O que você quer dizer com "normalização"? Stringo disse aqui que o algoritmo é algo parecido com isto:
Estou lhe fazendo uma pergunta específica e você está derramando água sobre mim. Como é normal explicar e argumentar seu ponto de vista?
Ler os livros didáticos e a documentação em voz alta ou o quê? Ou leia o dicionário em voz alta, sobre a palavra "aproximadamente"?