一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

.NET 中的二進(jìn)制浮點(diǎn)類型

  大多數(shù)人會(huì)對(duì)他們?cè)?NET中的算術(shù)的"出錯(cuò)"首先感到驚訝。使用一些稱為”浮點(diǎn)”算術(shù)來(lái)表示非整型數(shù)字不是.NET 相比其他大多數(shù)語(yǔ)言/平臺(tái)特殊的地方。在.NET 內(nèi)部是沒問題的,但是你需要知道一些底層正在發(fā)生什么,否則你將會(huì)對(duì)一些結(jié)果感到驚訝。

  我在這個(gè)事情上不是一個(gè)專家這不重要。雖然寫了這篇文章,我也發(fā)現(xiàn)了另外一篇 - 這次是一個(gè)真正的專家寫的,杰弗里 薩克斯(Jeffrey Sax)。我強(qiáng)烈建議你也同時(shí)讀他的浮點(diǎn)文章

  什么是浮點(diǎn)數(shù)?

  計(jì)算機(jī)總是需要一些表示數(shù)據(jù)的方式,最終這些表示數(shù)據(jù)的方式總是歸結(jié)為二進(jìn)制(0,1組合)。整數(shù)很容易表示(對(duì)負(fù)數(shù)有合適的轉(zhuǎn)換,有確定好的范圍可以知道表示從多大開始)但是非整數(shù)有一些復(fù)雜。不管你想出什么方法,總是有一個(gè)問題。例如,使用我們自己的十進(jìn)制方式寫數(shù)字: 仍然(在十進(jìn)制內(nèi)部)不能表達(dá)三分之一,你只是在一個(gè)3循環(huán)中結(jié)束。無(wú)論你使用多少進(jìn)制,一些數(shù)字都會(huì)產(chǎn)生同樣的問題 - 特別的,“無(wú)理數(shù)”的數(shù)字(那些不能用以分?jǐn)?shù)表示的數(shù)字)如常量PI(音: pai)和e(指數(shù)e)總是有一些問題。

  你可以將所有有理數(shù)用精確的兩個(gè)整型數(shù)表示,第一個(gè)數(shù)被第二個(gè)數(shù)除的結(jié)果 - 但是即便是一個(gè)非常”簡(jiǎn)單”的操作整數(shù)都可以增長(zhǎng)的非常大且非常快,平方根操作也會(huì)趨向產(chǎn)生無(wú)理數(shù)。有很多其他的因素會(huì)導(dǎo)致導(dǎo)致,但是最常用的解決問題的方式就是使用一種格式或其他格式的浮點(diǎn)類型。思想就是基礎(chǔ)有可以用來(lái)擴(kuò)展表達(dá)的一些數(shù)字(尾數(shù)),另外(指數(shù))用來(lái)表示規(guī)模是多大,以“小數(shù)點(diǎn)要去哪里”的形式表示。例如,34.5可以用”十進(jìn)制浮點(diǎn)類型”3.45加上一個(gè)指數(shù)1來(lái)表示,同樣的3450也可以有同樣的尾數(shù)和一個(gè)指數(shù)3(34.5是3.45x101,3450是 3.45x103)來(lái)表示。現(xiàn)在,為了簡(jiǎn)單起見例子使用十進(jìn)制表示,但是大多數(shù)浮點(diǎn)類型是二進(jìn)制表示的。例如,二進(jìn)制尾數(shù)1.1加上尾數(shù)-1將意味著十進(jìn)制0.75(二進(jìn)制1.1==十進(jìn)制1.5,在二進(jìn)制中指數(shù)-1意味著”被2除”,十進(jìn)制同樣的指數(shù)-1表示”被10除”,二進(jìn)制1.1==20.2-1==1.5(譯者注)).

  理解在同樣的方式你不能通過一個(gè)十進(jìn)制擴(kuò)充(無(wú)限)來(lái)精確表達(dá)三分之一是很重要的,有很多數(shù)字在十進(jìn)制形式看起來(lái)很簡(jiǎn)單,但是在二進(jìn)制表示中卻有長(zhǎng)的或者無(wú)限的擴(kuò)展。這意味著(舉例)一個(gè)二進(jìn)制浮點(diǎn)變量不能有精確的十進(jìn)制值0.1。相反,假設(shè)你又一些如下代碼:

  double x = 0.1d;

  變量x實(shí)際上將存儲(chǔ)最接近那個(gè)值的double型值。一旦你腦子里可以轉(zhuǎn)過彎兒,那么為什么一起計(jì)算結(jié)果看起來(lái)是”錯(cuò)誤”的將會(huì)變得很明顯。如果你被要求計(jì)算1/3 + 1/3,這兩個(gè)數(shù)相加的結(jié)果是0.666,而不是0.667(更接近兩個(gè)1/3 的和)。一個(gè)二進(jìn)制浮點(diǎn)類型的表達(dá)式是3.65d+0.05d != 3.7d(盡管在一些情況下它顯示成3.7)

  .NET 中的浮點(diǎn)類型是什么樣子的?

  C#標(biāo)準(zhǔn)僅列出double和float作為可用的浮點(diǎn)類型(這些是C#中System.Double和System.Single的速記表示),但是decimal類型(速記表示為System.Decimal)實(shí)際上也是一個(gè)浮點(diǎn)類型 - 它僅是十進(jìn)制浮點(diǎn)類型,但是指數(shù)的范圍很有趣。decimal類型在另外一篇文章中描述,所以這篇文章不會(huì)做任何深入探討 - 我們關(guān)注double和float.這兩個(gè)都是二進(jìn)制浮點(diǎn)類型,參照IEEE 754(一個(gè)多種浮點(diǎn)類型的標(biāo)準(zhǔn)定義)。float是一個(gè)32位類型(1個(gè)符號(hào)位, 23位的尾數(shù)和8位指數(shù)), double是一個(gè)64位類型(1個(gè)符號(hào)位, 52位尾數(shù)和11位指數(shù))。

  結(jié)果不是我期望的是不好的結(jié)果嗎?

  好吧,那取決于情況。如果你在寫財(cái)務(wù)軟件,你可能要非常嚴(yán)格的定義處理錯(cuò)誤的方式,數(shù)量也是直覺上用10進(jìn)制表示 - 在這種情況decimal類型更加與float或者double類型相似。如果,然而,如果你在寫一個(gè)科學(xué)應(yīng)用程序,使用十進(jìn)制浮點(diǎn)表示法可能會(huì)有一點(diǎn)弱,你也可能想要開始處理一些低精度的數(shù)目(一美元就是一美元,但是如果你在測(cè)量一個(gè)單位是米的長(zhǎng)度,你可能開始有一些不精確。)

  比較浮點(diǎn)數(shù)字

  所有這些可以得出一個(gè)推論,你應(yīng)該非常,非常少的去直接比較浮點(diǎn)數(shù)間是否相等。通常比較大于或者小于會(huì)好些,但是當(dāng)你對(duì)相等感興趣時(shí)你應(yīng)該總是考慮是否你實(shí)際上想要的接近相等:一個(gè)數(shù)字總是與另外一個(gè)相同。做這個(gè)的一個(gè)簡(jiǎn)單的方式是用一個(gè)數(shù)減去另外一個(gè)數(shù),使用Math.Abs來(lái)找到絕對(duì)值的不同,然后檢查是否這個(gè)誤差是否低到可以忍受的級(jí)別。

也有一些情況是病理的,這些是由于JIT優(yōu)化導(dǎo)致。查看下面的代碼:

using System;class Test{    static float f;    static void Main(string[] args)    {        f = Sum (0.1f, 0.2f);        float g = Sum (0.1f, 0.2f);        Console.WriteLine (f==g);
       //g = g + 1;
    }    static float Sum (float f1, float f2)    {        return f1+f2;    }}

NET技術(shù).NET 中的二進(jìn)制浮點(diǎn)類型,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 视频免费1区二区三区 | 亚洲看黄| 一区二区三区福利 | 国内精品区一区二区三 | 美女胸又www又黄网站 | 国内精品久久久久久野外 | 亚洲欧洲在线观看 | 国产综合婷婷 | 欧美成人三级网站 | 一级做α爰片久久毛片 | 日日摸夜夜添夜夜添毛片 | 国产精品色综合久久 | 日韩美女性行为免费视频 | 精品免费久久久久久影院 | 亚洲成综合人影院在院播放 | 国产精品免费观看视频播放 | 日本高清无卡码一区二区久久 | 国产91精品露脸国语对白 | 九九视频这里只有精品 | 91在线播放国产 | 日韩在线视屏 | se94se欧美| 色多多入口| 国产精品久久久久久 | 欧美综合一区 | 国产精品欧美亚洲韩国日本不卡 | 国产成人综合网在线播放 | 国产永久免费高清在线观看视频 | 国产无套在线观看视频 | 91视频a| 欧美另类xxxx图片 | 日本高清视频在线 | 国产精品欧美激情第一页 | 黄色 在线 | 日韩一区二区三区免费 | 在线免费一区 | 国产三级网站 | 五月天激情久久综合一区 | 国产成人亚洲综合小说区 | 激情小说图片网 | 精品视频国产 |