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

为什么在使用python和numpy时sin(180)不为零?

罗均
2023-03-14
问题内容

有谁知道为什么下面不等于0?

import numpy as np
np.sin(np.radians(180))

要么:

np.sin(np.pi)

当我将其输入python时,它的值为1.22e-16。


问题答案:

该数字π不能完全表示为浮点数。所以,np.radians(180)不给你π,它给你3.1415926535897931

sin(3.1415926535897931)其实类似1.22e-16

那么,您如何处理呢?

您必须计算出或至少猜测出适当的绝对和/或相对误差范围,然后x == y编写而不是:

abs(y - x) < abs_bounds and abs(y-x) < rel_bounds * y

(这也意味着你要组织你的计算,使相对误差相对较大y,而不是x在你的情况,因为y是恒定的0,这是微不足道的,只是做了落后的。)

Numpy提供了一个在整个数组中为您执行此操作的函数allclose

np.allclose(x, y, rel_bounds, abs_bounds)

(这实际上会检查abs(y - x) < abs_ bounds + rel_bounds * y),但这几乎总是足够的,如果没有,您可以轻松地重新组织html" target="_blank">代码。)

在您的情况下:

np.allclose(0, np.sin(np.radians(180)), rel_bounds, abs_bounds)

那么,您如何知道正确的界限呢?SO答案无法教您足够的错误分析。维基百科上不确定性的传播给出了一个高层次的概述。如果您真的不知道,可以使用默认值,即1e-5相对值和1e-8绝对值。



 类似资料:
  • 问题内容: 有人知道为什么下面的不等于0吗? or: 当我把它输入python时,它给出了1.22e-16。 问题答案: 数字“π”不能精确表示为浮点数。所以, 不是给你。 而“sin(3.1415926535897931)”实际上类似于“1.22e-16”。 那么,你是怎么处理的呢? 你必须算出,或者至少猜测出,适当的绝对值和/或 相对错误界限,然后,您可以写下以下内容,而不是“x==y”: (

  • 问题内容: 我的问题是为什么python为什么同时使用引用计数和gc的标记和清除?为什么不只是标记和扫描? 我最初的猜测是,使用引用计数可以轻松删除非循环引用的对象,这可能会在某种程度上加快标记扫掠并立即获得内存。不知道我的猜测是否正确? 有什么想法吗? 非常感谢。 问题答案: Python(语言)没有说明它使用哪种形式的垃圾收集。您描述的主要实现(通常称为CPython)。其他版本,例如Jyth

  • 通过阅读HSL / HSV色彩理论,我得到的印象是色调分量是一个周期性属性,每360度重复一次,可以独立于饱和度和亮度/值而改变。如果我错了,请纠正我,但这些陈述在逻辑上遵循前面的定义: < li >将色调旋转360度会产生相同的颜色 < li >将色调旋转180度两次会产生原始颜色 < li >将色调旋转180度,然后旋转-180度,产生原始颜色 但是,只有选项 1 是正确的。将色调旋转 4 倍

  • 问题内容: 我正在建模黎曼θ函数: 它对否定无效; 例如导致此错误: 为什么?应该只是如果我正确地记得我的数学。 问题答案: 在NumPy中,用于选择类似操作的输出dtype的逻辑基于dtype,而不是值。这意味着必须具有与相同的输出dtype 。 给出整数输出之类的东西很重要,这意味着必须给出整数或什么都不给出。他们什么也没捡。将整数提高为负整数幂是NumPy中的错误。 如果要浮点输出,请进行浮

  • 问题内容: 代码是这样的: 但是我还是很困惑。答案说: 第一个参数是要执行的程序(位于PATH上)。其余的是程序的sys.argv参数。 但是,如果我运行:并且此过程的将会是,其中不存在。那为什么要添加作为的第二个参数呢? 问题答案: 执行python时,它将为您创建。该列表中的值是 基于 操作系统传递给它的参数的,但它 会将该列表中的值 保留下来 。 换句话说,当调用Python时,它将设置为

  • 这是我有生以来第一次发现自己正在编写一个开源的Java API。希望能被列入许多其他项目。 对于日志记录,我(以及与我一起工作的人)一直使用JUL(java.util.logging),从来没有遇到过任何问题。然而,现在我需要更详细地了解我应该为我的API开发做些什么。我对此做了一些研究,我得到的信息让我更加困惑。因此有了这篇文章。 因为我是从七月来的,所以我对此有偏见。我对其余的知识不是那么多。