gpt4 book ai didi

go - 哪个更适合测试非有限 float IsNaN 或 IsInf?

转载 作者:IT王子 更新时间:2023-10-29 01:09:36 26 4
gpt4 key购买 nike

我需要测试非有限 float 并消除它们。我打算使用 math.IsInf() 来测试 float ,但我看到一些人为此目的使用了 math.IsNaN()。为此目的,其中一个比另一个更好吗?如果是,为什么?

编辑:这已被搁置,因为尚不清楚,所以这里有更多信息有望澄清问题。我正在做“The Go Programming Language”中的练习 3.1,它引用了这个 program .它要求的练习

If the function f returns a non-finite float64 value, the SVG file will > contain invalid elements (although many SVG renderers handle > this gracefully). Modify the program to skip invalid polygons.

我打算通过在角函数中添加以下内容来解决它

if math.IsInf(z, 0) {
return math.NaN(), math.NaN()
}

并将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)

我想检查我的工作,所以我决定查找其他人在线发布的关于这个问题的任何答案。我发现没有其他人在解决方案中使用过 math.IsInf() 但大多数人都使用过 math.IsNaN() 。这让我想知道我是否遗漏了一些东西,以及 math.IsNaN() 出于某种原因是否更适合这个目的。所以我查看了这两个函数的 Go Docs。我在维基百科和 IEEE 754 上查找了 NaN。我做了一般的网络搜索,以了解为什么其他人都在使用 math.IsNaN(),尽管它对我来说似乎不太直观。然后我在这里和 stackoverflow 上搜索答案,毕竟我真的没有答案,所以我决定发布一个问题。

最佳答案

如果您只需要考虑任一无穷大,那么 math.IsInf() 就足够了。但是,如果您需要同时防范无穷大和非数字值,则应将两者结合使用。

更多关于 float 的阅读:https://en.wikipedia.org/wiki/IEEE_754

math.IsNaN() 不适用于无限值的示例:https://play.golang.org/p/blHjr8i7p9

关于go - 哪个更适合测试非有限 float IsNaN 或 IsInf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46284285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com