- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
一个简单的浮点加法 x+y in,精度为 4(即 IEEE 尾数宽度为 3),指数为 3 位(emax=3
,emin=-4
) 对于 x = mpfr('0.75')
,y = mpfr('0.03125')
错误地给出 mpfr('0.75')
结果应该是 mpfr('0.8125')
。请注意,0.3125
是此降低精度格式的次正规数。
编辑:从链接中提取的终端交互并包括在内以供将来引用。
>>> "{0:.10Df}".format(mpfr('0.75')+mpfr('0.03125'))
'0.7500000000'
>>> get_context()
context(precision=4, real_prec=Default, imag_prec=Default,
round=RoundToNearest, real_round=Default, imag_round=Default,
emax=3, emin=-4,
subnormalize=True,
trap_underflow=False, underflow=False,
trap_overflow=False, overflow=False,
trap_inexact=False, inexact=True,
trap_invalid=False, invalid=False,
trap_erange=False, erange=False,
trap_divzero=False, divzero=False,
trap_expbound=False,
allow_complex=False)
>>>
最佳答案
免责声明:我维护 gmpy2。
我认为这是从字符串创建次正规的错误。我认为它在开发代码中是固定的,但我以后才能测试。我稍后会更新这个答案。
更新
问题与从字符串创建次正规无关。在这种情况下,正确创建次正规值。在 gmpy2 2.0.x 中,将字符串转换为次正规时存在一个罕见的错误。最简单的解决方法是先将输入转换为 mpq
类型;即 mpfr(mpq('0.03125'))
。
实际问题是默认的舍入模式。中间和正好是两个 4 位值之间的一半。 RoundToNearest
的默认舍入模式选择最后一位为 0 的舍入值。如果将舍入模式更改为 RoundUp
,您将获得预期的结果。
>>> from gmpy2 import *
>>> ctx=context(emax=4, emin=-4, precision=4)
>>> set_context(ctx)
>>> a=mpfr('0.75')
>>> b=mpfr('0.03125')
>>> "{0:.10Df}".format(a+b)
'0.7500000000'
>>> get_context().round=RoundUp
>>> "{0:.10Df}".format(a+b)
'0.8125000000'
最后一条评论:precision
、emax
和 emin
的值在 IEEE 标准和 MPFR 库之间略有不同。如果 e
是指数大小而 p
是精度(在 IEEE 术语中),则 precision
应该是 p+1
,emax
应该是 2**(e-1)
和 emin
应该是 4-emax-precision
。这不会影响您的问题,因为它只会更改 emax
。
关于python - 这是 python 的 gmpy2 中的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34881078/
我想知道为什么这段代码在 Python 中 print gmpy.sqrt(2009) 给出结果 44,而不是 44.82186966... 就像我想要的那样?如何设置函数以显示十进制数。 提前谢谢你
我想使用导入 gmpy 的 python 脚本。然而,python 总是告诉我: ImportError: 没有名为“gmpy”的模块 我在 Ubuntu 14.04 i686 上,我尝试通过各种方式
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我需要将一个 64 位整数从 DLL 传递到一个函数中,但 native python int 类型是 12 个字节(sys.getsizeof(1) 返回 12),我收到错误“ValueError:
我知道 import mpmath as mp print mp.libmp.BACKEND 但如果我没记错的话,它不会说我使用的是 gmpy 还是 gmpy2。 另外,每次你使用更新版本的东西时,你
这是我第一次尝试将 JIT 用于 python,这是我想要加速的用例。我读了一些关于 numba 的文章,它看起来很简单,但下面的代码没有提供任何加速。请原谅我可能犯的任何明显错误。 我也尝试按照 c
出于某种原因,我想在我的python(版本3.6.0)上安装gmpy2,我在pycharm上尝试过。 它给了我一条错误消息,如下所示: (我已经安装了pip),有人帮我吗?谢谢! 最佳答案 通常此类问
有人建议我使用 gmpy 来帮助有效地计算大数。在我只使用 python 之前,我的脚本运行了一两天然后内存不足(不确定这是怎么发生的,因为我的程序的内存使用基本上应该始终保持不变。可能是内存泄漏?)
我有 brew installed mpc 和 gmp ,但是当我尝试 pip install gmpy2 我得到一行编译错误 #include "mpc.h" 所以由于某种原因 clang 找不到
我无法在没有警告的情况下在 OS X Mountain Lion 上安装 gmpy(1 或 2)。我试过 pip,我试过编译,我安装了 gcc 4.2.1 并尝试用 i386 arch 编译 gmp(
我正在尝试使用名为 CatMAP 的程序这大量使用了 gmpy 依赖项(根据安装说明,我认为它是 gmpy,而不是 gmpy2)。 我通过 Anaconda 有 Python 2.7.12,但在安装
这方面有什么基准吗??? (我尝试用谷歌搜索一些结果,但没有找到...... 我无法测试 gmpy,因为 gmplib 不会安装在我的笔记本电脑上) 谢谢! 最佳答案 首先,我可能有偏见,因为我是 g
我已经在 Windows10 上安装了 Pyhton 3.7,当我运行 pip install gmpy 时,控制台向我返回此错误: Collecting gmpy Using cached ht
我已经在 Windows10 上安装了 Pyhton 3.7,当我运行 pip install gmpy 时,控制台向我返回此错误: Collecting gmpy Using cached ht
我是一名优秀的程序员,十分优秀!