PROBLEMA: CALCULAR DESVPAD--desvio padrão--fornece estouro numérico

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 172084
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Ao calcular o desvio padrão usando a função STD() CALCULAR, FoxPro pode retornar resultados com um estouro numérico em certos valores numéricos em vários intervalos de registros.
Resolução
Use uma rotina personalizada que calcula o desvio padrão. O programa a seguir aceita dois parâmetros para a tabela e o campo. Em seguida, ele calcula as várias somas e produtos dos campos antes do desvio padrão de computação. Crie um programa chamado std e insira o código a seguir:
   * Call this program by ?std("TableName","FieldName") or   * by assigning the result to a variable, y= std("TableName","FieldName")   *      PARAMETER mtable mfield      SELECT SUM(&mfield^2) FROM (mtable) INTO ARRAY yy      SELECT SUM(&mfield)^2 FROM (mtable) INTO ARRAY zz      SELECT COUNT(&mfield) FROM (mtable) INTO ARRAY xx      stdev=((xx*yy-zz)/xx^2)^.5      RETURN ROUND(stdev,12)				
se uma tabela denominada valores contiver num campo, digite esse comando na janela de comando:
   ?std("values","num")				
Situação
A Microsoft está pesquisando esse problema e publicará divulgaremos novas informações na Base de dados de Conhecimento da Microsoft como ele se torna disponível.
Mais Informações
O estouro numérico geralmente é observado quando uma tabela contém os mesmos valores repetidos reais em um amplo intervalo de registros. Por exemplo, se uma tabela contiver 10 registros e valor do registro de cada é 0.031, STD() CALCULAR produzirá um estouro. Isso pode variar dependendo o valor e o número de registros.

Uma maneira de detectar que houve um estouro numérico é para exibir o resultado de STD() CALCULAR na área de trabalho ou em uma WINDOW ESPERAR. Se SET falar estiver ativado, o resultado será exibido automaticamente na área de trabalho. Se houver um estouro, todos os asteriscos serão exibidos. Além disso, se o resultado de STD() CALCULAR é acrescentado ou substituído a um campo numérico em uma tabela, o seguinte erro pode ocorrer:
Estouro de numérico. Dados foram perdidos.

Etapas para reproduzir o problema

Insira o código a seguir em um programa e executá-lo:
   CLEAR   SET SAFETY OFF   SET DECIMALS TO 12   CREATE TABLE stdresult (num N(15,8)) &&Table for result of calculation   APPEND BLANK   CREATE TABLE stdtest (num N(15,8))   &&Table of values for calculation   FOR i = 1 TO 10      INSERT INTO stdtest(num) VALUES (0.031)   ENDFOR   FOR i = 1 TO RECCOUNT()      ?ALLTRIM(STR(i))+" "      SET TALK OFF      CALCULATE STD(num) FOR RECNO()<i TO nresult && Comment this line &                                                  && the next line once                                                  && you uncomment the                                                  && commented lines below.      ??nresult      *nresult=custstd('stdresult','num') && Uncomment this line & the next                                          && line to compute & display the                                          && standard deviation with a                                          && user-defined function.      *?nresult      SELECT stdresult      REPLACE num WITH nresult   &&Overflow error on 10th iteration      SELECT stdtest   ENDFOR   SET SAFETY ON   SET TALK ON   SET DECIMALS TO 2   PROCEDURE custstd   PARAMETER mtable mfield   SELECT SUM(&mfield^2) FROM (mtable) INTO ARRAY yy   SELECT SUM(&mfield)^2 FROM (mtable) INTO ARRAY zz   SELECT COUNT(&mfield) FROM (mtable) INTO ARRAY xx   stdev=((xx*yy-zz)/xx^2)^.5   RETURN ROUND(stdev,12)				
após executar esse código, as nove primeiros iterações devem ser zeros. O cálculo será todos os asteriscos e produzirá a mensagem de erro Estouro no comando REPLACE.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 172084 - Última Revisão: 02/22/2014 01:55:18 - Revisão: 2.1

Microsoft Visual FoxPro 3.0 Standard Edition, Microsoft Visual FoxPro 3.0b Standard Edition, Microsoft Visual FoxPro 5.0 Standard Edition, Microsoft Visual FoxPro 5.0a, Microsoft Visual FoxPro 3.0 for Macintosh

  • kbnosurvey kbarchive kbmt kbcode kbprb KB172084 KbMtpt
Comentários