全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:865
推到 Plurk!
推到 Facebook!

如何不損失精確度

 
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-02 18:13:01 IP:202.145.xxx.xxx 未訂閱
以下這個 sample, 示範了, 將 user 輸入的浮點數字串, 乘以 1000 之後轉換成整數, 可以看到, 即使用 long double 當成中間轉換用變數, 仍然是不正確, 只有 Currency 正確     
// BCB
#include 
#include 
#include     int main(int argc, char* argv[])
{
    float       f;
    double      d;
    long double dd;
    char        s[]="0.123";
    Currency    c;
    int         i[4],t;        printf("sizeof(float)=%d\n", sizeof(float));
    printf("sizeof(double)=%d\n", sizeof(double));
    printf("sizeof(long double)=%d\n", sizeof(long double));        for (t=0; t<10; t  ) {
        s[4]='0' t;
        sscanf(s,"%f",&f);
        sscanf(s,"%lf",&d);
        sscanf(s,"%Lf",&dd);
        c=StrToCurr(s);
        i[0]=1000*f;
        i[1]=1000*d;
        i[2]=1000*dd;
        i[3]=1000*c;            printf("%s %d %d %d %d\n", s, i[0], i[1], i[2], i[3]);
    }
    return 0;
}
結果
sizeof(float)=4
sizeof(double)=8
sizeof(long double)=10
0.120 119 119 120 120
0.121 120 120 121 121
0.122 122 121 122 122
0.123 123 122 123 123
0.124 123 123 124 124
0.125 125 125 125 125
0.126 126 126 125 126
0.127 127 127 127 127
0.128 128 128 127 128
0.129 128 129 129 129
系統時間:2024-05-19 19:10:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!