PRB: 計算標準--標準差--提供數值溢位

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:172084
本文已封存。本文係以「現狀」提供且不會再更新。
徵狀
在計算標準差使用計算 STD() 函式時 FoxPro 可以透過各種範圍的資料錄就上特定數值傳回數值溢位的結果。
解決方案
使用自訂的常式會計算標準差。下列程式接受兩個參數為資料表欄位。然後它會之前先計算標準差計算各種總合及產品的欄位。建立一個程式稱為 std 並輸入下列程式碼:
   * 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)				
如果名為值的資料表包含了欄位 num 命令視窗中輸入此命令:
   ?std("values","num")				
狀況說明
Microsoft 研究這個問題,並且將張貼新資訊 「 Microsoft 知識庫 」 中可用時。
其他相關資訊
當資料表包含相同的重複真實值透過不同廣泛範圍的記錄,通常被上述數值溢位。比方說如果資料表含有 10 筆記錄,且每一筆記錄的值為 0.031,計算 STD() 將會產生溢位。這可以視值和記錄數目會有所不同。

一種偵測發生數值溢位的方法,就是到桌面或等候的視窗中顯示計算 STD() 結果。如果 SET 通話 ON 結果會顯示在桌面上會自動。如果發生溢位會顯示所有的星號。而且,如果計算 STD() 結果已附加,或取代資料表中的數字欄位,可能會發生下列錯誤:
數值溢位。資料已遺失。

重製行為的步驟

在程式中輸入下列程式碼,並執行它:
   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)				
接續在執行這個程式碼首先九個反覆項目應為所有零。 計算會所有星號,將會產生溢位錯誤訊息上 REPLACE 命令。

警告:本文為自動翻譯

內容

文章識別碼:172084 - 最後檢閱時間:03/01/2014 15:27:55 - 修訂: 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 KbMtzh
意見反應