天天看點

中科大的那位,敢更不要臉點麼?

日前,中科大軟體學院二年級研究所學生 HCOONa 發表奇文 駁 GarbageMan 的《一個超複雜的簡介遞歸》——對延遲計算的實驗和思考。據他自稱發此“文章”是為了“打”我“臉”,本文欣賞了他究竟是如何“打臉”的。

  日前,中科大軟體學院二年級研究所學生 HCOONa 發表奇文 駁 GarbageMan 的《一個超複雜的簡介遞歸》——對延遲計算的實驗和思考。據他自稱發此“文章”是為了“打”我“臉”,下面就來看看他是如何“打臉”的。

  在C語言初學者代碼中的常見錯誤與瑕疵(5)中,我剖析了一位初學者針對如下問題所寫的代碼,

在世博園某資訊通信館中,遊客可利用手機等終端參與互動小遊戲,與虛拟人物Kr. Kong 進行猜數比賽。

當螢幕出現一個整數X時,若你能比Kr. Kong更快的發出最接近它的素數答案,你将會獲得一個意想不到的禮物。

例如:當螢幕出現22時,你的回答應是23;當螢幕出現8時,你的回答應是7;

若X本身是素數,則回答X;若最接近X的素數有兩個時,則回答大于它的素數。

指出其中的一個主要問題是從X分别向前後兩個方向查找素數的解決方案。因為其中的一個素數可能離X很近,另一個則離X很遠。在這種情況下,去查找較遠的素數是在做無用功。

  我提出的改進辦法是在X前後依照下面次序

  X X+1 X-1 X+2 X-2 X+3……

交替尋找素數。這種方案在最壞情況下(X兩邊素數到X距離相等),與原方案計算量相同,但對于距離不等的情況則不會做無用功。

  判斷素數的方法為試除法,即用[2~X1/2]之間中所有的整數試除X,如餘數都不為0則X為素數。

  當X較大時,由于區間内素數個數遠低于整數個數,是以,更優的解決方案是用[2~X1/2]之間中所有的素數試除。在一個超複雜的間接遞歸——C語言初學者代碼中的常見錯誤與瑕疵(6)中我實作了這種方案。

  由于這種方案過于精打細算,是以代碼比較複雜。

  對此,HCOONa發表評論:

這道題不是應該預先計算素數表,然後用二分查找嗎?怎麼會搞得這麼複雜?

  這是明顯的外行評論。因為,

  • 計算[1,x+](到大于等于X的素數)的素數表,需要試除的次數遠遠多于判斷X附近幾個數是否是素數的試除次數;
  • [1,x+]間的素數表有一大半求得毫無意義,很無聊;
  • 問題的解明顯為[1,x+]間素數表最後兩項之一,除了腦殘,沒人會想到用二分法。

  不過我還是給與了認真的回複

我考慮過你說的這種方案

但我認為計算出直到大于等于X的素數表得不償失

舉例來說X=100

要計算出直到101的素數表

計算過程中大約100個數都需要試除2 3 5 7

而文中的方案隻需要對100 101這兩個數分别用2 3 5 7 和 2 3 5 7 11試除一下就可以了

這個差别太大了

如果X=1000000000這個量級

兩者之間确實是天壤之别

計算素數表還有一個問題

就是事先不清楚到底有多少素數

是以很難估計數組大小

另外二分查找應該是用不上的

  點到為止,在這裡我很含蓄地指出了他的錯誤。沒想到,HCOONa竟然回複:

這就看你這個問題需要回答多少次了,

  尼瑪,題目裡說得清清楚楚了,“當螢幕出現一個整數X時”,幼稚園的孩子都能看懂的條件,他卻硬要裝傻充愣。你一個二年級研究所學生,這麼簡單的就連二年級國小生都能看懂的問題都看不懂嗎?無非是為自己前面的錯誤找轍罷了。

  我當時明确回複:

我隻考慮回答一次的情形

  尼瑪,我的算法是為什麼樣的問題設計的,瞎子都看得出來吧。

一般說來,10^9 以内的素數并不多,用篩法的話很快就能得到一個素數表,接下來使用二分查找一下就能找到給定的數是不是素數,以及距它最近的兩個素數是什麼。

  是嗎?10^9以内的素數的數目是5*10^7量級,居然不多?用篩法的話需要幾個GB大小的資料,難道記憶體不是資源?而所謂“很快就能得到一個素數表”純屬瞪着眼睛說瞎話。稍有程式設計常識的人都知道,問題規模在數量級上的提高意味着什麼。盡管篩法可能不需要進行除法運算,隻要簡單的加法和指派就可以了,但若說10^9次方的指派比10^5次除法更快,隻能騙騙不懂程式設計的中學生。

而你的方案則有可能需要更多的計算,比如說最近的素數差的比較多的時候,尤其是在 10^9 這個數量級,素數會變得比較稀疏,重複的計算可能會花費更多的時間。

  這個就不知道是真傻還是在裝傻了,給出了一個似是而非的依據。最近的素數差的比較多又能多到哪裡去呢?這個量級區間上素數的密度最多是幾百個數中有一個素數,幾百個數試除幾千個素數(109/2以内的)與進行109量級次加法和指派到底孰輕孰重?作為計算機專業二年級的研究所學生,難道這也不懂嗎?

如果你覺得維持一個素數表所需要的空間太大了,難以接受,那麼我建議使用 Rabin-Miller 素數測試。

  看來是說完大話,自己也有點心虛。于是扯出Rabin-Miller法遮掩。

  我當即回複:

據我所知

Rabin-Miller 素數測試隻是一個可靠性很高的近似測試

不能保證一定測試出素數

就本問題的要求來說

我認為不适合應用這種方法

  實在倦于這種無聊且無理的糾纏了,我隻好建議

或者

建議你抽空也寫一個

或者寫兩個

比較一下

如何?

  可他居然不依不饒:

之前我假設這個問題是需要回答多次的,即給定若幹個數字,分别回答這個問題,也是ACM中常見的情形。

  尼瑪,題目看懂沒有啊,你做這個假設有意義嗎?“分别回答”你的方法就占優嗎?ACM“回答多次”能多多少次啊,有回答1000000000次的嗎?如果不回答1000000000次,你的方法又有什麼優勢可言?!你前面的“這道題不是應該預先計算素數表,然後用二分查找”不是屁話嗎?你這句話中的“這道題”是什麼意思?說錯了不要緊,至于要用“之前我假設這個問題是需要回答多次的”這種不用拆就穿幫的謊話來掩飾嗎?再說“回答多次”你這樣寫法有耍賴皮的嫌疑懂不懂?我當時的回複是:

原問題确實是需要回答多次

但我沒按照那個寫

因為我覺得那有些過于偷奸耍滑了

是以隻按照回答一次寫的

但即使是回答一次

也需要測試這個數周圍幾個數是否是素數

是以才有了這種方案

素數的個數和分布情況見,其中指出,10^9 以内的質數有 5761455 個,所占比率是 5.761455%

另外一個已知的結論是,素數會随着數的增大而變得越來越稀疏。

  靠!中學生都知道的事情,扯這些沒用的就表示你高明?但在當時,我隻是心平氣和地回了一句:

但我的方案隻需要3000個左右的素數表

3000/5761455 = 0.052%

你的方法隻是惰性計算質數表,本質上并沒有什麼提高,而且是用的比較原始的質數表生成方式,生成的效率比篩法要慢,粗劣的分析見這裡。

  什麼叫“惰性計算質數表”,自創這些稀奇古怪的别人都不懂隻有你自己才懂的術語你不就是想裝高深嗎?後面引用的狗屁博文連我用腳丫子寫出東西的水準都比不上,你也好意思在這裡獻寶?什麼叫“比較原始的質數表生成方式”,你的篩法難道不原始?賣弄驢唇不對馬嘴的Rabin-Miller法才是不原始?不過當時我還是耐着性子回複: 

你把用篩法生成質數表的成本給忽略了

那可不是可以忽略不計的一項

而且這不幹稀疏什麼事情

理由我前面已經說了

  除此之外,你是對給定數值附近的每一個數“由近及遠”的分别進行判斷,是以在質數已經非常稀疏的情況下,難免會計算很多資料。而如果已經有了質數表,則可以直接找到相鄰的兩個質數,無論它們距離給定的數值有多遠。

  “是以在質數已經非常稀疏的情況下,難免會計算很多資料。”是基于狗屁不通邏輯上的結論。客氣點說是水準太低,不客氣地講就是在強詞奪理無理狡辯文過飾非。至于“如果已經有了質數表,則可以直接找到相鄰的兩個質數,無論它們距離給定的數值有多遠。”則純屬是廢話,那還用你說嗎?我的算法不就是為了回避計算素數表的巨大成本嗎?純粹從邏輯上來說,這話也是狗屁不同,因為既然前面講我的算法“難免會計算很多資料”,後面難道不應該論證你的方法不需要“計算很多資料”嗎?你論證了嗎?“可以直接找到”就是不需要“計算很多資料”嗎?你的方法在“可以”之前首先必須計算更多資料,為什麼你選擇性地視而不見呢? 

  我話已經說到這份上了,應該算到位了吧。可是還要強詞奪理:

毫無疑問,在生成同樣大小的素數表的時候,篩法比這種直接的素數判斷并生成的算法要快。我給的連結不知道為什麼被吞掉了,這裡 http://plussai.iteye.com/blog/1070387 有一個粗略的分析。即便是你的方法,把惰性生成素數表改成提前生成素數表,也是一個能夠簡化問題,提高效率的方法。

  第一句是屁話。沒有數組你怎麼用篩法,不知道有多少個素數你怎麼建立數組?第二句中的連結狗屁不通但還要當作寶貝獻出來。第三句是閉着眼睛胡說式的裝B,一定要比裝得我高明不可。實際上提前生成素數表,不做無用功是不可能的。比如對于100,可以建立2 3 5 7 這樣的素數表,但由于最近的一個素數大于100,是以連結清單在适當的時候必須增補新的素數。如果事先建立2 3 5 7 11 這樣的多一個元素的素數表,11也有可能根本用不上。這就是不可能提前生成素數表的原因。

  還是不死心:

下面再說隻問一次的情況,如果隻問一次的妥妥的用 Rabin-Miller 素數測試。Rabin-Miller 素數測試可以以任意給定的精确度來判斷一個數是不是質數,雖然本質上是非确定性的算法,但是如果你要求的精确度非常高,就可以近似認為給出的結果是正确的,比如說這個精确度比 10^-11 還高。

  麻煩你看看題目要求好不好?題目要求的是給定精度前提下嗎?是要求給出“非确定性”的解答嗎?早已經文不對題了,還厚着臉皮在這裡胡扯什麼呀?

  回複隻能實話直說:

“就可以近似認為”

你弄錯了場合

連問題的基本需求都不管不顧了

這個問題根本沒有說要求一個“近似”素數 

具體要比較性能的話比較麻煩,我的想法是在給定的區間上均勻的生成 10000 個随機數,然後分别問你和我的兩個程式,然後判斷總的用時,我相信我的程式會比你的快 :P

但是鑒于你說你考慮的情況是隻問一次的情況,我就沒做這個不公平的測試。如果使用 Rabin-Miller 素數測試的話,省卻了打表的時間,對于 10^9 這個數量級,理論上會比你的算法快出好幾條街。

  嗯,給大家看看什麼叫不要臉。不公平條件下,我比你快,是以我不測試就是讓着你了。使用近似算法比你的精确算法“快出好幾條街”,盡管題目要求的不是近似算法。這是不是在狗戴嚼子——胡勒呢?

  請大家順便注意一下這裡的“10000”,在本文後面還會講到這個數字的故事。 

是以其實我覺得你這個方案不好,增加了不必要的複雜性,還沒有更好的解決問題。思路毫無疑問是正确的,但是延遲計算而不是預先計算這個政策選擇的不太好,由此帶來的問題就是代碼非常複雜。

再加上你标題寫的是給初學者,我覺得就更應該注意一下,有點把問題搞複雜了。

  不裝B會死啊?什麼叫“增加了不必要的複雜性”,你的方案簡單,國小生都會,但前提是巨大的記憶體成本和時間成本,是“更好的解決問題”?我的代碼複雜,用得着你來下結論嗎?我标題裡早說得清清楚楚——“超複雜的間接遞歸”。

   媽的,空話屁話胡攪蠻纏無理取鬧,我實在是煩透了。隻好回一句

Talk is cheap , show me your code.

  我以為我終于懂得了Linus Torvalds講這句話時的心情。

  然而我錯了,事實證明Linus Torvalds比我幸運,這句話能讓在他面前空談的家夥閉嘴,但卻不能讓我面前的這位停止批發謬論: 

Rabin-Miller 素數測試可以給出一個非常精确地答案,該答案的精度高于浮點型資料的精度時我看不出來什麼理由不接受這個“近似”答案。更何況,整形計算也是有非常微小的幾率發生錯誤的,這是由于CPU制程越來先進,而由量子力學理論所預言的。

  理屈詞窮!連“精度高于浮點型資料的精度”這種狗屁不通的狗屁都放出來了。看來我實在低估了他的無恥。這不是逼着我說實話嗎? 

越來越扯了

直接回答"非常精确地答案"是不是"精确"

連浮點數都上來

這個問題和浮點數半毛錢關系都沒有

“整形計算也是有非常微小的幾率發生錯誤的”

天哪!

你們科大就學這個?

老師怎麼教的?

回去跟你們老師講講

看你們老師臉紅不臉紅?

  看見沒?你跟他談精确,他跟你扯“近似”,你跟他講一次計算,他跟你扯“回答多次”,你跟他講整數運算,他跟你扯“浮點精度”,你不接受他的“近似”答案,他就跟你耍流氓。 

那你是對我說的第一段話不信呢還是第二段話不信呢,還是都不信?我要是寫了程式可就要發文章打你臉了。

  大家看看,是不是頗具流氓與無賴的風采和神韻?

  耍流氓不算,還要向你潑髒水:

如果樓主的數學和實體沒有學好,不如再去讀讀書補習一下,沒有必要潑髒水。

  尼瑪,我數學再怎麼不好,也不會在要求證明等腰三角形底角相同時用“高于浮點型資料的精度”的量角器去量啊。你自己腦殘要我讀書補習是什麼道理? 你自污母校還賴我“潑髒水”?尼瑪,難道這是要将不要臉進行到底的節奏嗎?

  果然,次日又來了:  

讓事實說話:http://www.cnblogs.com/HCOONa/p/lazy-evaluation-is-usually-slow.html

  然而事實說了什麼?

  首先是自說自話,僞造前提條件:

該題有兩種模式,一種是隻考慮一次問答的情況,另一種是考慮連續問答。

   但又不得不用虛僞的态度承認:(MD,似乎有點露怯啊。露怯還怎麼将不要臉進行到底)

首先肯定一下,GarbageMan 的思路是正确的:在給定的 n 附近由近及遠的進行素數判定,直到找到一個素數為止。

  尼瑪!昨天不是說什麼“其實我覺得你這個方案不好,增加了不必要的複雜性,還沒有更好的解決問題”嗎?不是大言不慚什麼“但是延遲計算而不是預先計算這個政策選擇的不太好,由此帶來的問題就是代碼非常複雜。”嗎 ?怎麼開始自己打自己臉啦?

  然後在僞造的前提下開始圓謊: 

如果考慮多次問答的情況,考慮平均情況,延遲計算最終也會計算出大部分的素數表。與其動态的不斷補充素數表,還不如用更有效率的方法直接計算出整張素數表,是以對于這種情況,GarbageMan 的優化是毫無意義的。

  我的算法本來就是為一次問答設計的,對此他早就一清二楚。是以所謂“如果考慮多次問答的情況,考慮平均情況”“是以對于這種情況,GarbageMan 的優化是毫無意義的”難道不是屁話嗎?

Rabin-Miller 素數測試,是一種素數判定法則,利用随機化算法判斷一個數是合數還是可能是素數。

聽起來像是一個不靠譜的算法,但是該算法可以以任意給定的準确率給出可能正 确的答案。當這個準确率足夠大時,我們可以近似的認為這個算法給出的答案正确。(這一點遭到了 GarbageMan 的瘋狂嘲諷,我猜他不知道為什麼無窮大的倒數等于 0)

  弱智想赢得辯論,就隻能把對手說成弱智。

有關 Rabin-Miller 素數測試是否真的比通過試除法檢驗素數快,我們暫且将這一問題留待實驗結果說明

  嗯,分歧在于Rabin-Miller近似法是否适用于精确問題,但卻用Rabin-Miller比試除法檢驗素數快來論證。尼瑪!你這什麼邏輯啊?豬都不會這麼想!

 GarbageMan 自鳴得意的一個優化就是延遲計算素數表。在我看來,這是一個完全沒有必要的,并且極大地增加了代碼複雜度的優化。在多次問答的情況下

  看到了嗎。偷來的鑼鼓敲不得。偷換的前提,隻好鬼鬼祟祟地猥瑣地藏在後面扭扭捏捏小聲地說。

我的建議是,使用初始化方法預先計算從 [2, log MAX_N] 之間的素數,然後再用 GarbageMan 的

get_nearest

方法進行計算。在問答量比較大時,這種方法甚至會比 GarbageMan 優化過的算法還要快。

  這不但是卑鄙的掩飾,同時也是自供。等到您後面知道了“在問答量比較大時”裡的“比較大”到底是多大時,您就明白了。 

素數篩法已經十分先進了,甚至有亞線性時間複雜度的算法,是以,在實作生成素數表的情況下,沒有理由不選擇素數篩法。

  用好聽的“亞線性時間複雜度的算法”來蒙騙讀者,因為一般人都會覺得線性時間複雜度很好。但對我的算法隻有二分之一次方時間複雜度絕口不提。什麼叫欺騙,這就是欺騙。選擇性地告訴你一部分事實,同時選擇性地故意隐瞞一部分事實。 

我建議在計算素數表的時候,直接計算到比 n 的上限還要大的一個素數之後再停止生成素數表,然後通過二分查找,直接确定給定的 n 在素數表中的位置,進而找到距離 n 最近的素數。

  不解釋。這個二分法的愚蠢程度和陳良喬對連結清單使用二分法查找有得一拼。 

算法的思路至此介紹完畢,下面将設計實驗來驗證我的想法是否正确。

  嗯。僞造前提的鋪墊已經完成,下面可以進入角色了。我不知道他在寫這段話的時候有沒有臉紅。

實驗分别比較在單次問答模式下,GarbageMan 所用算法和 Rabin-Miller 算法的用時;在多次問答模式下,GarbageMan 所用算法和其他算法的用時。其中,在多次問答模式下,需要對 GarbageMan 所用的算法進行一些微調,以保證測試的公平性和正确性:

  尼瑪。把我專為單次問答設計的算法進行肢解篡改,以便綁架到他自己親口承認的“不公平的測試”中去,但還要假裝“公平”。這等的虛僞和僞善需要幾噸包天狗膽和寡廉鮮恥啊?!

編譯選項

/STACK:10485760,1048576 /O2

  輕描淡寫地提了一下編譯選項。這個編譯選項很多小朋友不知道,因為幾乎沒人用過。這個選項是因為他自己的篩法計算109内的素數表需要巨大的記憶體開銷。素數表對他自己的方案是有利因素,但對于我的方案來說,由于根本不需要這麼大的記憶體,是以不但沒好處,反而有壞處。因為通路大塊記憶體是有時間開銷的。我相信,微軟如果知道這個編譯選項會被無恥之徒這樣利用,一定會對設立了這個選項而後悔不疊。微軟,你欠我一個道歉。

給出的測試代碼依賴于 C++11 标準中提供的随機數生成函數,是以隻能在 Visual Studio 2013 和較新版本的 g++,clang++ 上不需要修改的通過編譯。使用較低版本的編譯器編譯時,可以結合 boost 庫提供的支援,進行有限的修改後通過編譯。 如果使用 g++ 或者 clang++ 進行編譯的話,請使用參數

-O2 -std=c++11

  大家看到了嗎?結果依賴于随機數生成函數,很多編譯器的随機數生成函數都有毛病,這個毛病就是不那麼“随機”。這裡他留了一個伏筆,以後有人發現作弊,他可以賴到C++11 标準中提供的随機數生成函數上去。另一個作用就是是暗補他前面說過的“均勻的生成”“随機數”的謊話。除此之外,把我的C代碼當作C++代碼編譯,“結合 boost 庫”,這都是在不動聲色地作弊。這就是他口口聲聲的“公平”。

實驗結果

當設定 n 的範圍在 [1, 10^6 - 10],且生成 50,000 個随機數時,多次問答模式下的測試結果如下:
Elapsed : 3900005ms    // GarbageMan 的方法
Elapsed : 500001ms     // 積極計算的方法
Elapsed : 2890109ms    // Rabin-Miller 算法
Elapsed : 270015ms     // 素數篩法和二分查找
           
再測一次:
Elapsed : 3920017ms    // GarbageMan 的方法
Elapsed : 500001ms     // 積極計算的方法
Elapsed : 2800004ms    // Rabin-Miller 算法
Elapsed : 300001ms     // 素數篩法和二分查找
           

由大數定律可知,GarbageMan 的算法在平均情況下運作效率較低,并且低于積極計算的方法,可見不僅白優化了,還起到了負面效果。

由于實驗結果顯示,在多次問答模式下 GarbageMan 的算法運作效率仍然低于為單次問答模式所設計的 Rabin-Miller 算法,是以沒有必要再進行單次問答模式的實驗。

  明眼人一下就能看出這段的毛病,但許多見識不多的小朋友可能看不出來。注意到“在多次問答模式下 GarbageMan 的算法運作效率仍然低于為單次問答模式所設計的 Rabin-Miller 算法”這句話的玄機了嗎?在“多次問答模式下”,無論如何我的算法都是吃虧的,因為我的算法本來就是為單次問答設計的。“多次問答模式下”會把我的算法的優勢徹底鏟除。但是Rabin-Miller 算法不受單次模式或多次模式的影響。他刻意造了這個生澀難懂的句子,以回避公布單次問答模式下我的算和Rabin-Miller 算法的結果。然後用刻意營造出的結果,以及八竿子打不着的不相關的用來蒙人的“大數定律”,以便裝腔作勢地宣布他精心炮制的謊言。

  前面他曾信誓旦旦煞有介事地表示,他要“分别比較在單次問答模式下”,但要宣布結果時,卻硬生生地把這話自己吃了下去。無恥至斯,歎為觀止!

  注意到這段開頭的那個“ 50,000”了嗎?還記得前面提到過的他在回複中說的那個“ 10000 個随機數,然後分别問你和我的兩個程式,然後判斷總的用時,我相信我的程式會比你的快 ”“會比你的算法快出好幾條街”嗎?為什麼他要把“10000”個随機數改成“50,000”呢?原因很簡單,生成一個109之内的素數表需要很多時間成本,為了“證明”他的方法快而又想用“事實”來編造謊言,這個巨大的時間成本就需要被分攤。這就是原因,沒有之一。

  後面的結論就不引述了,誰願意相信誰相信!這個世界上一向不乏樂于相信謊言的傻B!

  回過頭來看這篇奇文标題——駁 GarbageMan 的《一個超複雜的簡介遞歸》——對延遲計算的實驗和思考。我們不禁要問,他到底駁了什麼了?

  我認為Rabin-Miller 算法不适合精确計算,他駁了嗎?他吭哧癟肚地用移花接木的手法刻意地營造了一個實驗,我就算是退一萬步,抛開他的種種龌蹉的作弊作假不提,就算假定他的結論是對的,那也隻說明了Rabin-Miller 算法比我的快而已,那是對“Rabin-Miller 算法不适合精确計算”這個觀點的駁斥嗎?

  從這裡不難發現,中科大的這個HCOONa的科學素質極低,基本上是一個邏輯文盲。他的奇文中這種低素質不自覺的流露到處都是,比如标題中竟然明晃晃地出現了兩個錯别大字“簡介”,經驗告訴我,優秀的程式員對錯别字非常敏感,一般不會寫錯别字。再比如素數的定義: 

素數,又稱質數,指除了 1 和該整數自身外,無法被其他正整數整除的正整數。

  盡管他裝模作樣的在參考資料部分引用了

  • 維基百科——素數

  但維基百科中對素數的定義全然不是這麼回事。按他的定義,1也是素數,這和譚浩強是同一個水準。一個認真的國小生都能發現他的這個錯誤。是以科學素質其實跟學曆沒有必然關系,有很多高學曆者的科學素質并不高,有的甚至是自覺或不自覺的騙子。比如,清華大學的幾朵奇葩教授,……以後有機會再跟大家聊。

  我認為計算109量級的素數表,哪怕是用簡單的篩法,也必然要付出高昂的時間成本和記憶體成本作為代價。他駁了嗎?他隻是用精心建構的實驗去掩蓋而已,而且掩蓋的手法實在不咋地,以至于處處露馬腳。即便抛開這個人極其龌蹉低下的技術品德不談,作為一個騙子,他也是一點技術含量都沒有。被扒光内褲之後,你看到的無非就是一個無知無恥之徒在裸奔而已。

  曾經有人說過,世界上有三種謊言:謊言,彌天大謊,統計局公布的數字。現在我們有幸見識了第四種,就是HCOONa創造的這種用似是而非的理論,精心炮制的實驗,無恥的僞公平架勢,選擇性的事實構築的謊言。

  為什麼他要炮制這些謊言欺騙大家,原因隻可能有一個,前一天晚上在我的博文評論中放了半宿不通的狗屁,導緻肚子裡憋了兩大泡稀屎:

在此也勸告 GarbageMan,沒什麼本事就别在那叫嚣了,還寫什麼《C語言初學者代碼中的常見錯誤與瑕疵》,誤人子弟。
GarbageMan 多次對我進行人身攻擊,并且侮辱我的母校。在此我要說一句,GarbageMan 你真是人如其名——渣男,人品渣,技術也渣。

就這樣一直忍到第二天中午,實在憋不住了,沒有手紙找不到廁所也顧不得了,隻好~~~~噴吧!

  好臭! 

  終于徹底地應驗了魯迅老先生的那句話:“始于作僞,終于無恥!”。