我需要测试非有限浮点数并消除它们.我正计划用来 math.IsInf() 测试花车,但我看到有一些 math.IsNaN() 用于此目的的人.其中一个比另一个更好吗?如果是这样,为什么?
编辑:这已被搁置,因为它不清楚所以这里有更多的信息,希望澄清问题.我正在参考这个程序的 "The Go Programming Language"做练习3.1 .它要求的练习
如果函数f返回非限定的float64值,则SVG文件将>包含无效元素(尽管许多SVG渲染器处理>这个优雅).修改程序以跳过无效多边形.
我正计划通过在角落函数中添加以下内容来解决它
if math.IsInf(z, 0) {
return math.NaN(), math.NaN()
}
Run Code Online (Sandbox Code Playgroud)
并将main中第二个for循环的内容更改为
ax, ay := corner(i+1, j)
if math.IsNaN(ax) {
continue
}
bx, by := corner(i, j)
if math.IsNaN(bx) {
continue
}
cx, cy := corner(i, j+1)
if math.IsNaN(cx) {
continue
}
dx, dy := corner(i+1, j+1)
if math.IsNaN(dx) {
continue
}
fmt.Printf("<polygon points='%g,%g %g,%g %g,%g %g,%g'/>\n",
ax, ay, bx, by, cx, cy, dx, dy)
Run Code Online (Sandbox Code Playgroud)
我想查看我的工作,所以我决定查找其他人在网上发布的这个问题的答案.我发现没有其他人math.IsInf() 在那里使用 过解决方案,但大多数人已经使用过 math.IsNaN().这让我想知道我是否遗漏了某些东西,并且math.IsNaN() 出于某种原因是否 更好.所以我查看了Go Docs的两个功能.我在维基百科和IEEE 754上查找了NaN.我做了一般的网络搜索,为什么其他人都在使用 math.IsNaN() ,尽管它对我来说似乎不太直观.然后我在这里和stackoverflow上搜索了所有我没有真正答案的答案,所以我决定发一个问题.
如果您只需要考虑任何一个无穷大,那么math.IsInf()就足够了。但是,如果您需要同时防范无穷大和非数字值,则应将两者结合使用。
有关花车的更多阅读:https : //en.wikipedia.org/wiki/IEEE_754
math.IsNaN()不适用于无限值的示例:https : //play.golang.org/p/blHjr8i7p9