版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
用Go語(yǔ)言進(jìn)行數(shù)學(xué)、科學(xué)領(lǐng)域的計(jì)算Go語(yǔ)言從入門到精通詳細(xì)了解Go語(yǔ)言表達(dá)式的應(yīng)用學(xué)習(xí)在Go語(yǔ)言中如何進(jìn)行異常處理01EXPRESSION02MATHLIBS03EXCEPTIONtarget目標(biāo)了解和掌握系統(tǒng)自帶的和第三方數(shù)學(xué)庫(kù)目錄導(dǎo)航5.15.25.3表達(dá)式用表達(dá)式進(jìn)行數(shù)學(xué)計(jì)算利用系統(tǒng)自帶的數(shù)學(xué)庫(kù)進(jìn)行計(jì)算……Contents表達(dá)式的概念表達(dá)式表達(dá)的是一個(gè)計(jì)算過程,參與該計(jì)算過程的有數(shù)值、常量與變量、操作符(包括運(yùn)算符)、函數(shù)等,表達(dá)式最終計(jì)算的結(jié)果一般是一個(gè)數(shù)值。簡(jiǎn)單地說,表達(dá)式就是通過一組計(jì)算獲取某個(gè)結(jié)果值的算式。最簡(jiǎn)單的表達(dá)式——單個(gè)數(shù)值或變量18-26.970xFFEE"abcde"truefalsePianumber1操作符(運(yùn)算符)
+、-、*、/、%==、!=、>、>=、<、<=&&、||、!&、|、^、&^>>、<<函數(shù)在表達(dá)式中的作用package
main
import
(
"fmt"
t
"tools")
func
add(a,
b
int)
int
{
return
a
+
b}
func
main()
{
fmt.Printf("2+3=%v\n",
2+3)
t.Printfln("2+3=%v",
2+3)}可以替代操作符并且可實(shí)現(xiàn)的功能更多表達(dá)式中計(jì)算的優(yōu)先級(jí)順序
函數(shù)的優(yōu)先級(jí)最高;其次是一元運(yùn)算符;再其次是二元操作符,二元操作符之間的運(yùn)算優(yōu)先級(jí)如下:
*、/、%、<<、>>、&、&^等操作符優(yōu)先級(jí)最高,+、-、|、^次之,==、!=、<、<=、>、>=再次之,然后是&&,最后是||;相同優(yōu)先級(jí)的操作符或函數(shù),將按照從左到右的順序依次進(jìn)行計(jì)算;可以通過圓括號(hào)改變計(jì)算的優(yōu)先級(jí),最里層嵌套的圓括號(hào)內(nèi)的子表達(dá)式運(yùn)算優(yōu)先級(jí)是最高的,然后是較外層的圓括號(hào),并如此逐級(jí)向外進(jìn)行運(yùn)算。函數(shù)參數(shù)中如果有表達(dá)式,每個(gè)參數(shù)獨(dú)立進(jìn)行計(jì)算。復(fù)雜的表達(dá)式計(jì)算示例func
add(a,
b
int)
int
{
return
a
+
b}
func
main()
{
a
:=
3*(20-add(4,
5)%6)
>
18
t.Printfln("a
=
%v",
a)}
表達(dá)式中數(shù)據(jù)類型一致性
表達(dá)式中,大多數(shù)二元運(yùn)算符連接的參與運(yùn)算的數(shù)值類型必須一致如果要實(shí)現(xiàn)類型不一致的運(yùn)算,可以進(jìn)行強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換,或者自定義函數(shù)func
add(a
int,
b
float64)
float64
{
return
float64(a)
+
b}
func
main()
{
x
:=
15
y
:=
25.6
t.Printfln("%v",
add(x,
y))}目錄導(dǎo)航5.15.25.3……表達(dá)式用表達(dá)式進(jìn)行數(shù)學(xué)計(jì)算利用系統(tǒng)自帶的數(shù)學(xué)庫(kù)進(jìn)行計(jì)算……ContentsBMI指數(shù)的引入嚴(yán)格的語(yǔ)法規(guī)范體重指數(shù)(BodyMassIndex)是國(guó)際上常用于衡量人體胖瘦程度以及是否健康的一個(gè)標(biāo)準(zhǔn),它的公式是BMI=W÷H2,其中BMI是體重指數(shù)(嚴(yán)謹(jǐn)?shù)卣f應(yīng)該叫身體質(zhì)量指數(shù),mass是物理上質(zhì)量的意思)的縮寫,W指人的體重(單位是千克),H指人的身高(單位是米)。BMI指數(shù)的計(jì)算及應(yīng)用意義BMI=W/(H*H)因?yàn)镠2=H*H,所以該表達(dá)式與體重指數(shù)公式是等價(jià)的。對(duì)于成人,目前用于中國(guó)的分類標(biāo)準(zhǔn)大致是: 偏瘦:BMI<18.5
正常:18.5<=BMI<24
偏胖:24<=BMI<28
肥胖:28<=BMI<30
重度肥胖:BMI>=30基本計(jì)算與結(jié)果輸出
W
:=
65.0
H
:=
1.75
BMI
:=
W
/
(H
*
H)
t.Printfln("BMI:
%.2f",
BMI)
if
BMI
<
18.5
{
t.Printfln("偏瘦")
}
else
if
(18.5
<=
BMI)
&&
(BMI
<
24)
{
t.Printfln("正常")
}
else
if
24
<=
BMI
&&
BMI
<
28
{
t.Printfln("偏胖")
}
else
if
28
<=
BMI
&&
BMI
<
30
{
t.Printfln("肥胖")
}
else
if
BMI
>=
30
{
t.Printfln("重度肥胖")
}命令行參數(shù)package
main
import
(
t
"tools"
"os")
func
main()
{
args
:=
os.Args
for
i,
v
:=
range
args
{
t.Printfln("命令行參數(shù)%v:%v",
i,
v)
}
}
使用命令行參數(shù)傳入體重和身高
var
W
float64
var
H
float64
fmt.Sscanf(args[1],
"%f",
&W)
fmt.Sscanf(args[2],
"%f",
&H)
t.Printfln("體重:
%.2f",
W)
t.Printfln("身高:
%.2f",
H)
BMI
:=
W
/
(H
*
H)……目錄導(dǎo)航5.25.35.4……用表達(dá)式進(jìn)行數(shù)學(xué)計(jì)算利用系統(tǒng)自帶的數(shù)學(xué)庫(kù)進(jìn)行計(jì)算用Go語(yǔ)言進(jìn)行科學(xué)計(jì)算……Contents查閱Go語(yǔ)言文檔的方法1.godoc2.pkg.go.devmath包的Pow函數(shù)math包的Pow函數(shù)BMI:=W/math.Pow(H,2)用math/rand包產(chǎn)生隨機(jī)數(shù)
args
:=
os.Args
rand.Seed(time.Now().Unix())
var
floatList1
[10]float64
var
floatList2
[10]float64
for
i
:=
0;
i
<
10;
i++
{
floatList1[i]
=
rand.Float64()
*
20
floatList2[i]
=
rand.NormFloat64()*2
+
10
}
t.Printfln("%#v",
floatList1)
t.Printfln("%#v",
floatList2)目錄導(dǎo)航5.35.45.5……利用系統(tǒng)自帶的數(shù)學(xué)庫(kù)進(jìn)行計(jì)算用Go語(yǔ)言進(jìn)行科學(xué)計(jì)算使用math/big包……Contents向量在Go語(yǔ)言中的表達(dá)r1
:=
[]float64{1.2,
2.4,
3.6}一個(gè)三維向量向量的余弦相似度
計(jì)算余弦相似度的函數(shù)func
CalCosSim(f1,
f2
[]float64)
float64
{
l1
:=
len(f1)
l2
:=
len(f2)
if
l1
!=
l2
{
Printfln("兩個(gè)向量長(zhǎng)度不一致,f1的長(zhǎng)度是:%v,f2的長(zhǎng)度是:%v",
l1,
l2)
return
-1
}
var
rr
float64
=
0.0
var
f1r
float64
=
0.0
var
f2r
float64
=
0.0
for
i
:=
0;
i
<
l1;
i++
{
rr
+=
f1[i]
*
f2[i]
f1r
+=
f1[i]
*
f1[i]
f2r
+=
f2[i]
*
f2[i]
}
var
rs
float64
=
rr
/
(math.Sqrt(f1r)
*
math.Sqrt(f2r))
return
rs}調(diào)用計(jì)算余弦相似度的函數(shù)
v1
:=
[]float64{1.2,
2.4,
3.6}
v2
:=
[]float64{1.3,
2.4,
3.7}
v3
:=
[]float64{3.5,
4.8,
9.9}
t.Printfln("v1
-
v1:
%.5f",
t.CalCosSim(v1,
v1))
t.Printfln("v1
-
v2:
%.5f",
t.CalCosSim(v1,
v2))
t.Printfln("v1
-
v3:
%.5f",
t.CalCosSim(v1,
v3))v1-v1:1.00000v1-v2:0.99980v1-v3:0.99075目錄導(dǎo)航5.45.55.6……用Go語(yǔ)言進(jìn)行科學(xué)計(jì)算使用math/big包計(jì)算中的異常處理……Contentsmath/big包處理超大數(shù)或超高精度數(shù)值的計(jì)算math/big包
b1
:=
new(big.Float)
b1.SetFloat64(1.78)
b2
:=
new(big.Float).SetFloat64(2.69)
b3
:=
new(big.Float).Mul(b1,
b2)
f1,
_
:=
b3.Float64()
t.Printfln("f1=%v",
f1)大多數(shù)時(shí)候需要使用函數(shù)而非運(yùn)算符來進(jìn)行賦值與計(jì)算改進(jìn)的余弦相似度計(jì)算
rr
:=
new(big.Float).SetFloat64(0.0)
f1r
:=
new(big.Float).SetFloat64(0.0)
f2r
:=
new(big.Float).SetFloat64(0.0)
for
i
:=
0;
i
<
l1;
i++
{
f1Sub
:=
new(big.Float).SetFloat64(f1[i])
f2Sub
:=
new(big.Float).SetFloat64(f2[i])
rr.Add(rr,
new(big.Float).Mul(f1Sub,
f2Sub))
f1r.Add(f1r,
new(big.Float).Mul(f1Sub,
f1Sub))
f2r.Add(f2r,
new(big.Float).Mul(f2Sub,
f2Sub))
}
tmp1
:=
new(big.Float).Mul(new(big.Float).Sqrt(f1r),
new(big.Float).Sqrt(f2r))
tmp2
:=
new(big.Float).Quo(rr,
tmp1)
tmp3,
_
:=
tmp2.Float64()
return
tmp3目錄導(dǎo)航5.55.65.7……使用math/big包計(jì)算中的異常處理使用第三方包進(jìn)行復(fù)雜數(shù)學(xué)計(jì)算……Contentspanic-defer-recover機(jī)制panic:異常終止defer:保證退出時(shí)的清理recover:嘗試容納錯(cuò)誤繼續(xù)運(yùn)行匿名函數(shù)
a
:=
func()
{
t.Printfln("test")
}
b
:=
a
b()
func(n
int)
{
t.Printfln("got
%v",
n)
}(8)
Go語(yǔ)言的延遲處理機(jī)制func
main()
{
defer
func()
{
println("func1")
}()
defer
println("func2")
println("main")
}
Go語(yǔ)言的異常處理機(jī)制func
add(a,
b
int)
int
{
if
a+b
>
200
{
panic("a+b
>
200")
}
return
a
+
b}
func
main()
{
defer
func()
{
r
:=
recover()
t.Printfln("%v",
r)
}()
println(add(100,
200))}panic+defer+recover完美結(jié)合異常的傳遞順序函數(shù)中產(chǎn)生的異常如果沒有處理,會(huì)傳遞到它的外部調(diào)用者所在的函數(shù),如此一直“向上”傳遞,直至main函數(shù)如果main函數(shù)也沒有處理,則整個(gè)程序會(huì)被強(qiáng)行中止。使用runtime庫(kù)輸出更多的異常信息func
divide(a,
b
int)
int
{
return
a
/
b}
func
main()
{
defer
func()
{
if
r
:=
recover();
r
!=
nil
{
t.Printfln("發(fā)生異常,錯(cuò)誤信息:%v",
r)
_,
fn,
ln,
okt
:=
runtime.Caller(0)
t.Printfln("文件名:
%v,
行號(hào):
%v,
ok:
%v",
fn,
ln,
okt)
t.Printfln("調(diào)用棧:%v",
string(debug.Stack()))
}
else
{
t.Printfln("程序正常結(jié)束")
}
}()
t.Printfln("除法結(jié)果:%v",
divide(3,
0))}使用runtime庫(kù)輸出的結(jié)果示例發(fā)生異常,錯(cuò)誤信息:runtimeerror:integerdividebyzero文件名:C:/goprjs/src/test/test.go,行號(hào):18,ok:true調(diào)用棧:goroutine1[running]:runtime/debug.Stack(0x4d9972,0x21,0xc000075e58)C:/Go/src/runtime/debug/stack.go:24+0xaemain.main.func1()C:/goprjs/src/test/test.go:21+0x1bcpanic(0x4b9e00,0x575760)C:/Go/src/runtime/panic.go:513+0x1c7main.divide(...)C:/goprjs/src/test/test.go:10main.main()C:/goprjs/src/test/test.go:27+0x45目錄導(dǎo)航5.65.75.8……計(jì)算中的異常處理使用第三方包進(jìn)行復(fù)雜數(shù)學(xué)計(jì)算使用第三方圖表庫(kù)輔助科學(xué)計(jì)算Contents矩陣計(jì)算——gonum/mat包
/topxeq/goexamples/blob/master/gonum1/gonum1.go矩陣定義與矩陣乘法
//
定義參與運(yùn)算的矩陣
a和
b
var
a
*mat.Dense
a
=
mat.NewDense(2,
3,
[]float64{
1,
2,
3,
4,
5,
6})
b
:=
mat.NewDense(3,
2,
[]float64{
1,
2,
3,
4,
5,
6})
//
定義用于存放計(jì)算結(jié)果的矩陣c
var
c
mat.Dense
//
進(jìn)行矩陣乘法運(yùn)算
c.Mul(a,
b)
矩陣計(jì)算結(jié)果輸出
//
用gonum/mat包中的格式來輸出結(jié)果矩陣c的信息
cOutput
:=
mat.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 八下期末考拔高測(cè)試卷(3)(解析版)
- 《色彩的聯(lián)想》課件
- 《廉政專題教育講座》課件
- 教育培訓(xùn)行業(yè)前臺(tái)接待總結(jié)
- 樂器店前臺(tái)崗位職責(zé)總結(jié)
- 2023年-2024年員工三級(jí)安全培訓(xùn)考試題附答案【預(yù)熱題】
- 2023年-2024年安全管理人員安全教育培訓(xùn)試題及答案典型題
- 2023年-2024年項(xiàng)目部治理人員安全培訓(xùn)考試題及答案高清
- 1994年安徽高考語(yǔ)文真題及答案
- 1993年福建高考語(yǔ)文真題及答案
- GB/T 10739-2023紙、紙板和紙漿試樣處理和試驗(yàn)的標(biāo)準(zhǔn)大氣條件
- 《家居顏色搭配技巧》課件
- 鐵三角管理辦法(試行)
- 高考小說閱讀分類導(dǎo)練:詩(shī)化小說(知識(shí)導(dǎo)讀+強(qiáng)化訓(xùn)練+答案解析)
- 《公司法培訓(xùn)》課件
- 全國(guó)教育科學(xué)規(guī)劃課題申報(bào)書:83.《供需適配性理論視域下我國(guó)老年教育資源供需匹配度研究》
- 民用航空器-世界主要機(jī)型介紹
- 經(jīng)驗(yàn)教訓(xùn)記錄
- 【語(yǔ)文】江蘇省蘇州市星海小學(xué)小學(xué)三年級(jí)上冊(cè)期末試題(含答案)
- 設(shè)計(jì)圖紙成品校審記錄單
- 電動(dòng)牽引車設(shè)備安全操作規(guī)定
評(píng)論
0/150
提交評(píng)論