学习围棋—范围

嗨,我是Go编程语言的新手。


我正在从http://www.golang-book.com/学习


在第4章的练习中,有一个关于从华氏温度转换为摄氏度的问题。


我将答案编码如下


    package main


import "fmt"


func main(){


    fmt.Println("Enter temperature in Farentheit ");


    var input float64


    fmt.Scanf("%f",&input)


    var outpu1 float64 = ( ( (input-32)* (5) ) /9)

    var outpu2 float64=  (input-32) * (5/9)

    var outpu3 float64= (input -32) * 5/9

    var outpu4 float64=  ( (input-32) * (5/9) ) 


    fmt.Println("the temperature in Centigrade is ",outpu1)

    fmt.Println("the temperature in Centigrade is ",outpu2)

    fmt.Println("the temperature in Centigrade is ",outpu3)

    fmt.Println("the temperature in Centigrade is ",outpu4) 

}

输出如下


sreeprasad:projectsInGo sreeprasad$ go run convertFarentheitToCentigrade.go 

Enter temperature in Farentheit 

12.234234

the temperature in Centigrade is  -10.980981111111111

the temperature in Centigrade is  -0

the temperature in Centigrade is  -10.980981111111111

the temperature in Centigrade is  -0

我的问题是关于outpu2和outpu4。括号是正确的,但是它如何或为什么显示-0。


谁能解释一下


开满天机
浏览 329回答 2
2回答

天涯尽头无女友

很简单,该表达式(5/9)被评估为(int(5)/int(9))equals 0。尝试(5./9)为了弄清楚为什么会发生这种情况,它处理了确定表达式变量类型的顺序。我猜想b / c的(5/9)存在不考虑input上述情况2和4,编译器将它们解释为,int并简单地将表达式替换为0,这时零被认为取决于输入,因此float64在最终之前采用类型汇编。一般来说,Go不会为您转换数字类型,因此这是唯一对我有意义的解释。

桃花长相依

在围棋语言规格说明float32和float64签署浮动遵循IEEE-754标准的数字。以下是引自维基百科的文字-签名为零:IEEE 754浮点算术标准(目前大多数支持浮点数的计算机和编程语言都在使用)要求+0和−0。零可被视为扩展实数线的变体,因此1 / −0 =-∞和1 / + 0 = +∞,仅对±0 /±0和±∞/±∞未定义以零除。显然,input当afloat64加上负32时,它变成另一个float64为负数。5/9评估为0。负数float64计时0为-0。有趣的是,如果您将input整数替换为,例如1,则会得到0而不是-0。似乎在Go中,浮点数同时具有+0和-0,而整数则没有。编辑: PhiLho在注释中解释了为什么整数不具有浮点数的原因:标准化的浮点数具有+ 0,-0,NaN,+ Infinity和-Infinity的特殊表示形式,而您无法保留一些位组合整数具有这样的含义。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go