go语言基础之浮点和复数

介绍

go语言中,包含有小数点的数字就是浮点型。例如3.13go语言中的浮点采用的是IEEE 754标准的表达式。

浮点数表示方法

go中,有两个类型用来表示浮点,float32float64,如果你学过C语言,那么go中的float32相当于C中的float类型,float64相当于C语言当中的double类型。
例如现在要定义一个浮点数,可以参考下面的代码:

var a1 float32
a1 = 2 
a2 := 2.0 // 如果不加上小数点,那么a2就会被推到成整型。

在上面的例子中,a2的值为2.0,被自动推到为float64,不管赋的值是否是用32位表示。所以此时如果将a1 = a2,就会出现编译错误。只能通过强制类型转换解决。

a1 = float32(a2)

浮点数比较方法

使用浮点数来表达数据,并不精确,所以像整型那样直接使用==来进行判断是不可行的。
下面是作者在golang中文网看到的一种比较浮点数的方法,可以参考。

import (
    "fmt"
    "math"
)

func main() {
    // 设置精确度为0.00001
    var a Accuracy = func() float64 { return 0.00001 }
    fmt.Println(a.Equal(0.11111222, 0.11111222233333)) //打印结果为:true
}

type Accuracy func() float64

func (this Accuracy) Equal(a, b float64) bool {
    return math.Abs(a-b) < this()
}

func (this Accuracy) Greater(a, b float64) bool {
    return math.Max(a, b) == a && math.Abs(a-b) > this()
}

func (this Accuracy) Smaller(a, b float64) bool {
    return math.Max(a, b) == b && math.Abs(a-b) > this()
}

func (this Accuracy) GreaterOrEqual(a, b float64) bool {
    return math.Max(a, b) == a || math.Abs(a-b) < this()
}

func (this Accuracy) SmallerOrEqual(a, b float64) bool {
    return math.Max(a, b) == b || math.Abs(a-b) < this()
}

复数类型

复数实际上由两个实数(在计算机中用浮点数表示)构成,一个表示实部(real),一个表示虚部(imag)。

那么什么是实数呢?
实数是有理数和无理数的总称。
有理数为整数(正整数、0、负整数)和分数的统称。
无理数,也称为无限不循环小数,不能写作两整数之比。无理数是指实数范围内不能表示成两个整数之比的数。简单的说,无理数就是10进制下的无限不循环小数,如圆周率、 等。

复数表示

复数表示示例如下:

var value1 complex64 // 由2个float32构成的复数类型
value1 = 3.2 + 12i
value2 := 3.2 + 12i // value2是complex128类型
value3 := complex(3.2, 12) // value3结果同 value2 

复数它的默认类型是complex128(64位实数+64位虚数)。如果需要小一些的,也有complex64(32位实数+32位虚数)。复数的形式为RE + IMi,其中RE是实数部分,IM是虚数部分,而最后的i是虚数单位。

转载于:https://www.cnblogs.com/liujunhang/articles/10298167.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值