2 回答
TA贡献1831条经验 获得超9个赞
很简单,该表达式(5/9)被评估为(int(5)/int(9))equals 0。尝试(5./9)
为了弄清楚为什么会发生这种情况,它处理了确定表达式变量类型的顺序。
我猜想b / c的(5/9)存在不考虑input上述情况2和4,编译器将它们解释为,int并简单地将表达式替换为0,这时零被认为取决于输入,因此float64在最终之前采用类型汇编。
一般来说,Go不会为您转换数字类型,因此这是唯一对我有意义的解释。
TA贡献1860条经验 获得超8个赞
在围棋语言规格说明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的特殊表示形式,而您无法保留一些位组合整数具有这样的含义。
- 2 回答
- 0 关注
- 326 浏览
添加回答
举报
