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

Traduções deste artigo Traduções deste artigo
ID do artigo: 172084 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

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.

Propriedades

ID do artigo: 172084 - Última revisão: sábado, 22 de fevereiro de 2014 - Revisão: 2.1
A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbnosurvey kbarchive kbmt kbcode kbprb KB172084 KbMtpt
Tradução automática
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

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com