国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#中double值的精度問題

2019-11-17 02:49:33
字體:
供稿:網(wǎng)友

C#中double值的精度問題

在開發(fā)的時候,遇到一個問題,c#中定義一個double變量,當(dāng)這個變量在很大的時候,讓這個變量加上或者減去一個較小的值不會改變其大小(這個其實(shí)與double變量的二進(jìn)制存儲機(jī)制相關(guān)),就是說加上一個值之后的值.comPareTo(原來的值)返回0,就是說他們相等。

于是我想找到哪個具體的值是在加上或者減去1時,值的改變可以被檢測到的。于是有了以下代碼。

            //因?yàn)橄喈?dāng)大的范圍內(nèi)都是可以檢測到大小改變的,所以不從1開始,節(jié)約時間            double a = 10000000;            double PRe_a = 0;            double b = 0;            double c = 0;            int c1 = 0;            int c2 = 0;            double addValue = 1;            while (true)            {                pre_a = a;                a += addValue;                b = a + 1;                c = b + 1;                c1 = a.CompareTo(b) ;                c2 = b.CompareTo(c);                if ((c1 < 0) && (c2 == 0))                {                    //輸出最后結(jié)果                    Console.WriteLine("a = " + a + "  b = " + b + "  c = " + c);                    break;                }                if ((c1 < 0) && (c2 < 0))                {                    addValue *= 2;                }                else                {                    //求解過程中,跳過了目標(biāo)值,回到上一個值從新開始找                    Console.WriteLine("跳過目標(biāo)值,a=" + a);                    a = pre_a;                    addValue = 1;                }            }

求出來的結(jié)果是:a=90071992647409921

實(shí)際上,根據(jù)double值的存儲結(jié)構(gòu)應(yīng)該是可以從理論上推算出來這個值的。詳細(xì)的機(jī)制以及使用的注意事項(xiàng)參見MSDN(下方的鏈接)。這個具體的理論推算過程先留個坑在這里吧,以后有時間了過來填。

參考:

http://technet.microsoft.com/zh-cn/library/system.double


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 秦安县| 精河县| 泸州市| 容城县| 桂东县| 黔江区| 唐山市| 玉龙| 饶河县| 太和县| 顺义区| 竹北市| 青海省| 东兰县| 饶河县| 西林县| 新民市| 西盟| 九江县| 吴旗县| 依兰县| 钟祥市| 南岸区| 麦盖提县| 会昌县| 耒阳市| 米易县| 体育| 民和| 无极县| 万盛区| 万年县| 广丰县| 禄劝| 荥经县| 太仆寺旗| 盐边县| 定边县| 准格尔旗| 云南省| 玉龙|