国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 鹿泉市| 阿拉善盟| 永寿县| 黎平县| 洛浦县| 瓮安县| 元朗区| 临武县| 若尔盖县| 洛川县| 彩票| 奇台县| 宁夏| 石棉县| 荥经县| 阜南县| 哈尔滨市| 安平县| 广东省| 咸阳市| 龙南县| 雅江县| 商南县| 澄城县| 怀安县| 吴堡县| 阿克| 皋兰县| 金塔县| 岳普湖县| 农安县| 嘉定区| 怀来县| 玉门市| 余干县| 碌曲县| 西平县| 泾阳县| 中方县| 象州县| 古蔺县|