首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取机器epsilon的最简单的方法

获取机器epsilon的最简单的方法
EN

Stack Overflow用户
提问于 2014-03-04 23:46:59
回答 2查看 5.5K关注 0票数 8

什么是最简单的方法,让机器感应器前进?浮点数的其他方面,如精度、最小指数、最大指数、摆动等怎么办?

我意识到,对于不同的浮点类型(http://golang.org/src/pkg/math/const.go),存在带有max和min的数学/const包,但没有其他信息。

我想知道的一个原因是为了验证我已经达到了给定计算的最大精度,这样机器就可以完成,这样我就不会提前退出,也不会尝试更长的时间。

另一个只是好奇。

谢谢

编辑:

为了好玩,我在学校的一些笔记中查阅了关于如何手工计算epsilon的有趣之处,下面是c++ http://play.golang.org/p/XOXwIdNfsa乐趣的粗略翻译。

编辑:下面的评论(谢谢你用一种更地道的方式找到epsilon):

使用epsilon := math.Nextafter(1, 2) - 1 游乐场 - 尼克·克雷格-伍德 Mar5 8:07

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-04 23:59:32

它没有定义,我发现问题被解决为在问题跟踪器上“按预期工作”:

https://code.google.com/p/go/issues/detail?id=966

如果需要的话,建议使用math.Nextafter来获得值。

具体来说,公式是math.Nextafter(1.0,2.0)-1.0 (第二个参数可以是任何大于1.0的数字)。

票数 14
EN

Stack Overflow用户

发布于 2017-10-18 18:57:14

上面的内容适用于any 二进制浮点类型(例如,您所指的Go类型)。

代码语言:javascript
运行
复制
package main

import "fmt"

func main() {
    f32 := float32(7.)/3 - float32(4.)/3 - float32(1.)
    fmt.Println(f32)

    f64 := float64(7.)/3 - float64(4.)/3 - float64(1.)
    fmt.Println(f64)
}

给予:

代码语言:javascript
运行
复制
-1.1920929e-07
2.220446049250313e-16

获取f32的绝对(无符号)值将生成正确的机器ε。

编辑:正如SGJ在下面的评论中提到的,这并不适用于十进制浮点类型,但据我所知,它们还没有在Golang中实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22185636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档