当前位置: 首页 > 面试题库 >

为什么Go中的math.Nextafter(2,3)会增加0.0000000000000004而不是0.0000000000000001?

郎雪风
2023-03-14
问题内容

这是从这里获取的:http :
//tour.golang.org/#5

package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Printf("Now you have %g problems.",
        math.Nextafter(2, 3))
}

结果:

//Now you have 2.0000000000000004 problems.
//Program exited.

问题答案:

使用java /scala将会得到完全相同的结果,该math/#Nextafter函数“返回朝Y X后的下一个表示值。”

Float64frombits(Float64bits(x) + 1)

如本主题所述

float64
不能表示所有16位数字。
例如,如果x = 0.12345678901234567,使用math.Nextafter,您可以看到附近的float64值为…
1234565,… 1234566和… 1234568

或者这个线程:

一些在基数10中可以精确表示的数字在基数2中不能完全表示。
例如,数字0.1(基数10)不能在基数2中精确表示。
就像0.1(基数3)一样,也不能精确表示。以10为底的十进制值:它是0.33333(永久重复)。

golang问题4398说明:

const x1 = 1 - float64(1.00000000000000000001) // 0!

规范说,如果“
可由type的值表示”,则x可以将常量值转换为type 。 该值不能用表示;最接近的近似值为1。T``x``T
1.00000000000000000001``float64



 类似资料:
  • NikiC在另一条线上说: 为什么refcount? 为什么在运行之后,refcount没有出现?

  • 问题内容: 在Go中,有可能等同于或取决于系统架构的类型。我可以声明一个整数变量而不必担心它的大小: 为什么没有type ,它等于或取决于我的系统的体系结构?我希望我也可以: 问题答案: float已在版本2011/01/20中删除。 您仍然可以使用简短的变量声明: 但正如GO常见问题解答所述: 出于可移植性的原因,我们决定以代码中的一些显式转换为代价,使事情变得清晰明了。 您可以在以下主题中查看

  • 问题内容: 在上面,为什么(char1 + 1)或(char ++)不打印增量字符,而其他两个打印呢? 问题答案: 首先,我假设是因为您说的是工作量的增加,所以您确实指定了: 编辑 响应问题(=> )的更改,我看到了问题。输出是 之所以显示,是因为char 被提升为一个(二进制数字提升)加1。因此变成97(的ASCII值)和98个结果。 但是,或者不执行二进制数字提升,因此它可以按预期工作。 引用

  • 问题内容: 在下面的示例中,只是,而在我看来应该是。 为什么“字符串键控”索引不增加数组的? 我可以存储东西并仍然可以访问它,而VS调试器显示这些数组已正确存储。那么为什么不增加呢? 问题答案: Javascript数组不能具有“字符串索引”。Javascript 仅在数字上进行索引。设置“字符串索引”时,就是在设置对象的属性。这些是等效的: 这些属性不是阵列“数据存储”的一部分。 如果要“关联数

  • 问题内容: 我不明白为什么 ‘chown’ 命令应该增加我的docker映像的大小? 以下Dockerfile创建大小为5.3MB的映像: 但是,此示例创建的图像大小为8.7MB: 为什么? 注意: 我的实际dockerfile当然比该示例长得多,因此映像大小的增加也很大。这就是为什么我什至在乎。 问题答案: Dockerfile中的每个步骤都会生成一个新的中间映像或“层”,该文件由文件系统中与上

  • 代码只是从输入源获取ip数据,然后在加入后找到它的公司。以下是我的问题: 这段代码在生产中会运行2-3分钟,但当删除广播数据(只需在两个数据上连接)时,只需花费不到1分钟。当我查看spark的ui时,我发现gc时间可能是问题所在。 下面是运行此作业的设置: null 更新2。由于生产代码相当复杂,与上面的伪代码不同,在代码顺序上稍作改变后,程序运行得更快,但我不确定问题的关键是初始化广播数据的位置