阿賢今天在youtube推薦影片中看到一隻狗狗睡覺夢遊的影片,睡到一半狗狗突然四肢擺動起來,又走又叫又奔跑,還有撞牆...到底是做了什麼好夢,有沒有這麼激動阿XD。

latinboy 發表在 痞客邦 留言(4) 人氣()

蒙地卡羅法求圓周率

  蒙地卡羅法(Monte Carlo Method)求圓周率的原理示意圖如下。正方形邊長為1單位長,面積為1平方單位;黃色扇形面積等於半徑為1單位長的1/4圓,面積為pi/4。在正方形內均勻隨機丟石頭,落在扇型內的機率 = 扇型面積÷正方形面積=pi/4。所以只要隨機產生N個座標(x,y),看看座標(x,y)落在扇形中(x2+y2<1)的次數有幾次。落在扇形中的次數除以N再乘上4的數值理論上就會接近圓周率PI。

  程式中我們要不斷產生0<=x,y<1的座標點,使用frand()的方式來產生即可。完整程式碼如下。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

latinboy 發表在 痞客邦 留言(12) 人氣()

  阿賢在上一篇裡簡單的介紹如何起始srand()及使用rand()函數,接下來要說說如何從基本函數rand()變化出最常使用的兩種「固定範圍均勻亂數」。

[1.] 產生 0.0 <= frand() < 1.0 的浮點數亂數( frand()為自訂函數 )
  frand = rand()/((float)RAND_MAX+1),或
  frand = rand()/((double)RAND_MAX+1)

[2.] 產生 0 <= random(n) <= n 的整數亂數( random(n)為自訂函數 )

latinboy 發表在 痞客邦 留言(2) 人氣()

Fortran_code.GIF

  亂數的產生與使用對於電腦科學以及自然科學都有很重大的意義,20世紀初電腦的出生一部分的任務就是為了利用亂數計算出原子彈能不能爆炸。到了現代,統計學、電腦模擬、基因演算法等等先進的演算法仍然是建立在亂數上。最重要的,樂透電腦選號網路遊戲掉寶網路麻將洗牌註冊認證碼等等現代虛擬世界常見的功能,也是用亂數做的!!所以,學會怎麼使用亂數是很重要的!
  Fortran 90語言的標準中規定了標準亂數副程式RANDOM_SEED()以及RANDOM_NUMBER(),在F90以前的F77則沒有統一的標準。使用亂數前必須呼叫RANDOM_SEED()函式將亂數函數中的種子值(seed)初始化,不先呼叫本函數、或種子值固定,都會造成新手常見的「每次執行產生的亂數結果都相同」問題。大多數的Fortran compiler為了方便起見在使用者呼叫RANDOM_SEED()時會自動代入系統內的clock作為seed。GCC系列的Fortran則一定需要使用者自行設定seed值。一般而言,只需在程式開始使用亂數前呼叫一次RANDOM_SEED()即可,不必重複呼叫 (也不要不小心把RANDOM_SEED()包在迴圈裏面)。RANDOM_NUMBER(rand)是一個亂數副程式,使用時把要設為亂數的變數rand傳進去即可得到亂數,rand必須是浮點數型態。Fortran很特別的一點是,傳進去的參數rand可以是任意維度的陣列,所以可以一次得到大量的亂數。
  在下面的程式中阿賢最簡單的示範如何使用RANDOM_SEED()、RANDOM_NUMBER()將亂數初始化,並印出來。如果是使用gfortran,則需要改成呼叫INIT_RANDOM_SEED()這個自訂的副程式(不是使用gfortran也可以用)。在INIT_RANDOM_SEED()內示範了如何使用SYSTEM_CLOCK()作為亂數seed的基礎。

program random_test
implicit none

latinboy 發表在 痞客邦 留言(11) 人氣()

C_code

  亂數的產生與使用對於電腦科學以及自然科學都有很重大的意義,20世紀初電腦的出生一部分的任務就是為了利用亂數計算出原子彈能不能爆炸。到了現代,統計學、電腦模擬、基因演算法等等先進的演算法仍然是建立在亂數上。最重要的,樂透電腦選號網路遊戲掉寶網路麻將洗牌註冊認證碼等等現代虛擬世界常見的功能,也是用亂數做的!!所以,學會怎麼使用亂數是很重要的!
  C語言的標準中內建了亂數函數srand()以及rand()。使用亂數前必須呼叫 srand()函式將亂數函數中的種子值(seed)初始化,不先呼叫本函數、或種子值固定,都會造成新手常見的「每次執行產生的亂數結果都相同」問題。為了方便起見可以使用 time(NULL)這個系統內的時鐘作為seed,使每次執行產生的亂數序列不同。一般而言,只需在程式開始使用亂數前呼叫一次srand()即可,不必重複呼叫 (也不要不小心把srand包在迴圈裏面)。rand()是一個亂數函數,每呼叫一次rand()會傳出一個新的亂數。
  在下面的程式中阿賢最簡單的示範如何使用srand、time將亂數初始化,並印出10次rand()亂數及RAND_MAX。

#include <stdio.h>
#include <stdlib.h>/* rand(), srand(), RAND_MAX */

latinboy 發表在 痞客邦 留言(0) 人氣()

有些時候可能會需要讓程式暫停幾秒,可能是要等設備回應,也有可能,只是要讓CPU休息一下...在Fortran中如何做到這件事呢?

直覺上要讓程式暫停幾秒鐘可以利用讀時間 + do loop,下面阿賢利用SYSTEM_CLOCK這個Fortran90標準副程式以上述的概念實做出一個能讓程式暫停指定秒數的subroutine: sleep_secs


01
02
FORTRAN90

latinboy 發表在 痞客邦 留言(1) 人氣()


下面這篇文章是阿賢在剛學電腦的時候看到的,因為很喜歡他的內容,就拿來當打字、排版的練習(阿賢是個用功的好小孩)。原始文章的備分遺失了,最近靠著google大神,從網海中找到當初轉寄流出去的"備份"。先來回味一下。



如果你稍有一點年紀,那麼你一定知道:SEIKO精工錶,曾經是日本「敗部復活」的代表性商品之一。
從前照亮西門町街頭的SEIKO霓虹看板,也許今日已經換成了數位新秀CASIO,但相對於眼下最紅的電腦資訊產業,當年的SEIKO精工錶,比起現在的CASIO可能不惶多讓,充滿了如日之昇的企業活力;但是,誰敵的過時間的巨掌呢,企業就像人,也有誕生、成長、成熟、衰退、死亡的生命週期。
東京奧運計時啟示錄(取自PC home雜誌 NO.28 1998年5月號 P.40)

latinboy 發表在 痞客邦 留言(2) 人氣()

咻咻

阿賢的頭像是一隻帥氣的狗狗,因為阿賢生肖屬狗。有看過海賊王的人應該都認識他,他叫咻咻。堅毅的眼神,堅定的腳步,勇敢的守護著自己最愛的家。這是阿賢的榜樣,所以就把他拿來當自己頭像 :)


咻咻OS:放開那個女孩!

話說回來,阿賢愛看的漫畫其實不多,所以阿賢不是阿宅(誤),請不要誤會我>_<。

latinboy 發表在 痞客邦 留言(0) 人氣()


阿賢記得小時候在某本書上看過,說海水中的黃金儲藏量比世界上被挖出來的黃金還多。仔細想想,這可真是不得了啊,有點超乎想像。

長大後的阿賢在辛苦的學會濃度計算後,決定證明這件事情的真假。下面是阿賢找到的一張海水成分表,列出了正常海水中不包含水分子在內的元素濃度。其中的單位ppm代表1公斤(kg)的海水中有幾毫克(mg)的該物質,也可以等價於一公噸的水中有多少公克(g)的該物質。有了這項概念後,阿賢就可以算出海水中的黃金到底有多少啦。

先來算一下一個游泳池大的海水有多少黃金,假設游泳池長25m、寬10m、深1.5m,則總共有約375噸的海水。黃金(Au)在海水中的濃度為0.06ppm,所以:
375(噸)×0.06(公克/噸) = 22.5(公克)
結果相當令人吃驚!一個游泳池多的海水裡面有大約22.5公克的黃金,相當於一個游泳池可以撿到3個金戒指 XD

latinboy 發表在 痞客邦 留言(0) 人氣()

1
Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。