日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

打破你的认知,数字除以 0 一定会崩溃吗?

發布時間:2025/3/21 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打破你的认知,数字除以 0 一定会崩溃吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:IT互聯網大叔
鏈接:https://juejin.im/post/5edcc957e51d4578801683c0

一、引言

在這個浮躁的社會,我們都學會了一種技能,快速學習使用各種開源庫、開源框架。

學習使用各種高端大氣的技術,熱修復、插件化、模塊化、ORM……

這些技能固然重要,但是有時候也要放慢腳步,耐著性子,打打基本功。

不要看不起這些零零碎碎的基礎知識,這些基礎日積月累,慢慢的會讓你跟同事拉開差距。

接下來,我們直奔主題。開始我們的基本功。

二、代碼1

System.out.println("1/0=" + 1/0);

大叔的靈魂拷問:

上面的代碼會崩潰嗎?如果不會,會輸出什么呢?

上面的代碼會崩潰嗎?如果不會,會輸出什么呢?

上面的代碼會崩潰嗎?如果不會,會輸出什么呢?

運行直接崩潰。

三、代碼2

我們再來看一行代碼:

System.out.println("1.0/0=" + 1.0/0);

大叔的靈魂拷問:

會崩潰嗎?如果不會,會輸出什么呢?

會崩潰嗎?如果不會,會輸出什么呢?

會崩潰嗎?如果不會,會輸出什么呢?

輸出日志:

四、為什么?

為什么浮點數除以0不會崩潰?

我們先說結論:

因為java的float和double使用了IEEE 754標準。

這個標準規定:浮點數除以0等于正無窮或負無窮。

4.1、Double類的定義

于是我們打開Double這個類來看看。

infinity單詞的意思是:無窮大

NaN是Not?a?Number的簡稱,也就是非數。

于是,我們發現,正無窮大的定義居然是1.0f/0.0f?。負無窮大的定義為?-1.0f/0.0f非數的定義為0.0f/0.0f

4.2、代碼段3

我繼續看一個代碼段:

public static void main(String[] args) {System.out.println("1.0/0=" + 1.0/0);System.out.println("-1.0/0=" + -1.0/0);double positiveInfinity = 1.0/0;double negativeInfinity = -1.0/0;System.out.println("(positiveInfinity==negativeInfinity)=" + (positiveInfinity==negativeInfinity));System.out.println();System.out.println("100.0/0=" + 100.0/0);System.out.println("-100.0/0=" + -100.0/0);System.out.println();System.out.println("0.0/0=" + 0.0/0);System.out.println("(-0.0==0.0)=" + (-0.0==0.0)); }

大叔的靈魂拷問:

上面的代碼段會輸出什么呢?

上面的代碼段會輸出什么呢?

上面的代碼段會輸出什么呢?

運行結果:

4.3 java語言規范( Java Language Specification)

docs.oracle.com/javase/spec…[1]

注意關鍵詞1:

IEEE 754

java的單精浮點數float和雙精浮點數double,符合IEEE 754標準。

IEEE 754:二進制浮點數算術標準?,這個標準描述了浮點數的存儲以及處理的一些規范。

注意關鍵詞2

A NaN value is used to represent the result of certain invalid operations such as dividing zero by zero.

翻譯過來的就是:NaN = 0.0/0.0

這也就是我們看到Double類里面NaN的定義。

我們把這個文檔往下翻一些,會發現這么一句:

for example,?1.0/0.0?has the value positive infinity, while the value of?1.0/-0.0?is negative infinity.

翻譯成中文:1.0/0.0 等于正無窮大,1.0/-0.0 等于負無窮大

于是我們明白,浮點數除以0并不會崩潰,他是合法的,是符合IEEE 754規范

也正是因為?IEEE 754的規范就是這么規定的,所以java才這么實現的

下面這段來自,維基百科,en.wikipedia.org/wiki/Divisi…[4]

五、有什么用呢?

我們即使知道了,浮點數除以0不會崩潰,知道了IEEE標準,有什么用呢?

很多人都會覺得,費這么大勁,理解了,浮點數除以0不會崩潰,能有什么用呢?平時我們寫代碼都不會除以0。這么騷的操作,我才不會這么干。

是的,這個操作是有點騷,你不會這么干并不代表其他同事不會這么做。而且很可能你這么干了自己不知道。

在我們寫業務代碼的時候,這個知識點,很少很少能用上。

但是當我們剛好遇到除以0導致的bug的時候,這個時候就非常有用。最近我也寫了個全局變量的bug,被同事們打臉,推薦大家看下。

尤其像android的app,用戶在線上遇到的bug,我們無法復現,只能通過日志去分析排查時;

這個時候每個程序員都是福爾摩斯,根據一行行日志線索,配合實際代碼,排查問題的可能性。

如果我們的認知是錯誤的,任何數除以0都會崩潰,那么我們的分析將會直接繞過真相去推理。于是得出結論,怎么可能有bug,不可能的。

于是浪費了很多時間,去收集線索,去推翻我們固有的認知,才能找到真相。

假如我們一開始就有正確的常識,我們就會少走很多彎路。

大叔給大家,講一個工作中真實的故事:

有位同事寫了這么一段代碼

/** * 速度換算 米/秒 * @param distance 距離,單位米 * @param time 時間,單位秒 */ float computeSpeed(float distance, long time){return distance/time; }

然后有一天突然某同事從另一個進程獲取到數據傳入這個函數。

再然后,突然有一天發現,速度顯示一串很奇怪的數字。

于是……接下來的故事,便如你們所想。

原本1小時就解決的bug,花了5個小時。

也正如,blog開頭的引言所表達的。不要小看這些零零碎碎的知識點。

參考資料

[1] docs.oracle.com/javase/spec…:?https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.3

[2] 關于IEEE754,百度百科:?https://baike.baidu.com/item/IEEE%20754/3869922?fromtitle=IEEE754%E6%A0%87%E5%87%86&fromid=10427270&fr=aladdin

[3] IEEE-754 references:?https://web.archive.org/web/20070505021348/http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html

[4 ]en.wikipedia.org/wiki/Divisi…:?https://en.wikipedia.org/wiki/Division_by_zero

[5] 關于IEEE754,百度百科:?https://baike.baidu.com/item/IEEE%20754/3869922?fromtitle=IEEE754%E6%A0%87%E5%87%86&fromid=10427270&fr=aladdin

[6] IEEE-754 references:?https://web.archive.org/web/20070505021348/http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html

[7] stackoverflow.com/questions/1…:?https://stackoverflow.com/questions/12954193/why-does-division-by-zero-with-floating-point-or-double-precision-numbers-not

總結

以上是生活随笔為你收集整理的打破你的认知,数字除以 0 一定会崩溃吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: xxxx久久| 国语对白一区二区三区 | 毛片成人网 | 中文字幕综合在线 | 性av网 | 四虎精品永久在线 | 日韩网站在线 | 久久综合一区二区三区 | 麻豆视频在线播放 | 自拍偷拍精品视频 | 日本熟妇人妻中出 | 青草视频在线观看视频 | 五月天色丁香 | www.国产免费| 少妇高潮久久久 | a毛毛片| 日韩在线中文字幕视频 | 日韩精品视频在线免费观看 | 91黑丝美女 | 日韩极品少妇 | 9.1成人看片 | 欧美黑人粗大 | 伊人久久一区 | 日韩特黄一级片 | 白丝校花扒腿让我c | 久久久精品999 | 久久永久视频 | 在线资源av | 黄页视频在线观看 | 日本黄色电影网址 | 国产精品嫩草久久久久 | 欧美成人性生活片 | 日本a级黄 | 日韩成年人视频 | 久久久少妇 | 91娇羞白丝网站 | 国产夜夜嗨 | 一本色道久久亚洲综合精品蜜桃 | 在线免费日韩av | 久久久久亚洲av无码a片 | 久久久久无码国产精品一区 | 国产123| sm久久捆绑调教精品一区 | 他揉捏她两乳不停呻吟动态图 | 中国黄色免费网站 | aaaaaaa毛片 | 国产成人在线观看网站 | 午夜电影福利网 | 亚洲一页 | 九九热在线视频 | 爱爱视频日本 | 白嫩白嫩国产精品 | 992tv在线影院 | 国产在线观看免费视频今夜 | 欧美日韩三| av在线片 | jizzjizz美国| 欧美三级黄色大片 | 日本xxxx色| 国内精品免费视频 | 99在线精品观看 | 香蕉视频污视频 | 网站色| 熊猫电影yy8y全部免费观看 | 国产精品无码毛片 | 深夜福利日韩 | 在线日韩亚洲 | 97人妻精品一区二区三区免 | 女人av| 国产精品自拍区 | 国产片在线播放 | 内射干少妇亚洲69xxx | bl无遮挡高h动漫 | 国产午夜成人久久无码一区二区 | 一级黄色录像免费观看 | 欧美另类videos | 全黄性性激高免费视频 | 国外亚洲成av人片在线观看 | 大肉大捧一进一出好爽视频动漫 | 午夜天堂精品 | 久在线观看 | 久久九九热| 关秀媚三级| 成人观看| 亚洲欧美在线一区二区 | 禁漫天堂下载18 | 色久天 | 久久深夜| 免费在线观看不卡av | 亚洲欧美日韩国产综合 | 中文在线播放 | 国产91精品ai换脸 | 91丨porny丨在线 | 高清乱码免费网 | 人人舔人人插 | 91九色成人 | 黄色成人av | 欧美午夜精品一区二区三区 | 午夜视频在线观看视频 |