奇狐社區論壇
在這個頁面顯示本主題全部的 9 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- 請問這是怎麼一回事? (單精度) (http://www.chiefox.com.tw/bbs/showthread.php?threadid=7391)


由 shuenyi 在 2007-03-28 10:26 發表:

請問這是怎麼一回事?

在福建飛狐發現這樣一個問題
http://bbs.fjfox.com/thread-38715-1-1.html
STRTONUM('20070419'); 顯示出來卻是:20070420
STRTONUM('20071107'); 顯示出來卻是:20071108
STRTONUM('20081121'); 顯示出來卻是:20081120

是個有趣的問題,這個問題似乎只在 '16779999' 以後會發生,試試看

x:='16779999';
xx:='16779998';
//y:=2007041.9;
drawtext(barpos=sysparam(2),c,x),align4;
//drawnumber(barpos=sysparam(2),c,y,1),align4,shift10;
strtonum(x);
strtonum(xx);

很不幸的是在我的奇狐也有同樣問題存在,請問這是怎麼回事?


由 cgjj 在 2007-03-28 12:23 發表:

這很正常的
因為公式中的數值採單精度格式儲存(7位有效位數)

所以函數 DATE, 用下列方法來表示
DATE 有效值範圍為 700101-1341231 (用來表示19700101-20341231)


由 shuenyi 在 2007-03-28 13:10 發表:

這個我明白,例子中所述的並非日期(雖然料想原問者所想表現的可能是與日期有關),而是單純自文字 '16779999' 等轉化成數字,並不要求四捨五入,即使軟體自動四捨五入也應該是均勻分布才對,並且要有一個強迫不四捨五入的方法來控制,否則在應用到類似轉化的過程,會發生災難
此外,其變化並非依尋常的四捨五入規則來的,我想這是軟體的bug,請教總版主的看法


由 cgjj 在 2007-03-28 13:57 發表:

並非 Bug
16779999 已達8位數了
最未位在計算或轉換過程中即會有差距(精度問題)


由 cgjj 在 2007-03-28 14:25 發表:

就 DATE 函數來說
今日的 DATE 值為 1070328 代表 20070328
2007 - 1900 = 107
您將年份文字轉為 DATE 函數 的格式
即可於奇狐中計算相對應的日期


由 shuenyi 在 2007-03-28 19:14 發表:

我在上面已經說過,這不是單純關係到日期計算問題,日期的計算不應該與一般數字混淆,一個軟體不應該在任何數字的處理都只限於7位數,而且也不適宜把所有數字都當成日期來看待,況且在同樣是8位數的裡頭,問題似乎不發生在16779999之前,這與8位的解釋有點出入,反正這個問題顯然沒有帶給使用者多少困擾,因為會用到這樣表示的公式寫法並不多見,只是心有存疑,就直話直說,並非存心找碴,謝謝總版主的教導


由 cgjj 在 2007-03-29 10:29 發表:

引用:
最初由 shuenyi 發表
我在上面已經說過,這不是單純關係到日期計算問題,日期的計算不應該與一般數字混淆,一個軟體不應該在任何數字的處理都只限於7位數,而且也不適宜把所有數字都當成日期來看待,況且在同樣是8位數的裡頭,問題似乎不發生在16779999之前,這與8位的解釋有點出入,反正這個問題顯然沒有帶給使用者多少困擾,因為會用到這樣表示的公式寫法並不多見,只是心有存疑,就直話直說,並非存心找碴,謝謝總版主的教導


謝謝您的指教
但您的說法有誤, 並非事實
在此鄭重澄清, 以免誤導他人

第一
奇狐並無把 【所有數字都當成日期來看待】


第二
奇狐並無把 【在任何數字的處理都只限於7位數】
單精度本身是可以計算超過7位數的數值的
只是它的精準度只有數值的前7位數


第三
再強調一次, 單精度有效位數是前7位

【問題似乎不發生在16779999之前】
這並非重點, 也無證實的必要

自 10000000∼99999999 這中間均是八位數
單精度計算上其最末位數即可能會失真
最末位數有時會正確,有時會有誤差
至於在其中的那個數值開始會失真已無意義
所以技術上均以 『有效位數7位』稱呼之


第四
單精度的精準範圍是否夠用, 見人見智
就算將單精度改為倍精度也是有其失準的時候
奇狐目前採用單精度,個人認為並無不妥
因為盤中計算上可以迅速很多,精準度也可接受
很少人盤中會看超過7位數的
有時甚至會有人嫌數字太長
將其轉換為 "萬" 或 "億" 來表達
因為若不小心多看一位數, 可能會損失慘重

就看您是做何用途嚕


由 shuenyi 在 2007-03-29 12:05 發表:

請勿生氣!!實在佩服版主的博學多能,不這樣也不會多懂一點,絕無妖言惑眾之心,奇狐仍是我的最愛,謝謝指導,對不確之言向奇狐道歉


由 cgjj 在 2007-03-29 12:12 發表:

引用:
最初由 shuenyi 發表
請勿生氣!!實在佩服版主的博學多能,不這樣也不會多懂一點,絕無妖言惑眾之心,奇狐仍是我的最愛,謝謝指導,對不確之言向奇狐道歉


沒生氣啦
站在我們的立場, 是必需澄清此問題的
讓使用的人有正確認知

別放心上喔
謝謝您提出此問題
也歡迎您多多繼續給予我們指教
謝謝!


全部時間均為台灣時間, 現在時間為00:43
在這個頁面顯示本主題全部的 9 個文章


Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.