- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定这是否是一个错误。但是我一直在玩big
我不明白为什么这段代码会这样工作:
https://carc.in/#/r/2w96
代码
require "big"
x = BigInt.new(1<<30) * (1<<30) * (1<<30)
puts "BigInt: #{x}"
x = BigFloat.new(1<<30) * (1<<30) * (1<<30)
puts "BigFloat: #{x}"
puts "BigInt from BigFloat: #{x.to_big_i}"
输出
BigInt: 1237940039285380274899124224
BigFloat: 1237940039285380274900000000
BigInt from BigFloat: 1237940039285380274899124224
首先,我认为 BigFloat 需要更改
BigFloat.default_precision
与更大的数字一起工作。但从这段代码看来,它似乎只在尝试输出
#to_s
时才重要。值(value)。
BigInt: 1237940039285380274899124224
BigFloat: 1237940039285380274899124224
BigInt from BigFloat: 1237940039285380274899124224
BigFloat.to_s
使用
LibGMP.mpf_get_str(nil, out expptr, 10, 0, self)
. GMP在哪里说:
mpf_get_str (char *str, mp_exp_t *expptr, int base, size_t n_digits, const mpf_t op)
Convert op to a string of digits in base base. The base argument may vary from 2 to 62 or from -2 to -36. Up to n_digits digits will be generated. Trailing zeros are not returned. No more digits than can be accurately represented by op are ever generated. If n_digits is 0 then that accurate maximum number of digits are generated.
最佳答案
在 GMP 中(它适用于所有语言,而不仅仅是 Crystal),整数(C mpz_t
,Crystal BigInt
)和浮点数(C mpf_t
,Crystal BigFloat
)具有单独的默认精度。
另外,请注意使用显式精度比设置默认精度更好,因为默认精度可能不是可重入的(它取决于 configure
-time 开关)。此外,如果有人只阅读了您的代码的一部分,他们可能会跳过设置默认精度的部分并假设错误。尽管我不太了解 Crystal 绑定(bind),但我认为此类功能在某处公开。
零参数传递给 mpf_get_str
意思是根据精度来猜测值。我知道有效数字的数量是成比例的并且接近 precision / log2(10)
.浮点数具有有限的精度。在那种情况下,它不是 mpf_get_str
使最后一位数字为零的调用-内部表示没有保留此类数据。看起来您的(默认)精度太小而无法存储所有必要的数字。
总结一下,有两种解决方案:
BigFloat --> BigInt
产生缺失的数字。
关于gmp - 为什么 BigFloat.to_s 不够精确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46711149/
是否可以生成 BigFloat 的随机数?类型均匀分布在区间 [0,1)? 我的意思是,因为 rand(BigFloat)不可用,看来我们必须使用 BigFloat(rand())为了那个结局。然而,
在 Julia 中,有人实现了正态分布 pdf 或 cdf 来支持任意精度的 BigFloats。 例如,此代码返回 0.0,而实际上这些值应该略有不同。 x = parse(BigFloat, "2
我正在尝试在我的 Mac (OS X 10.8.4) 上安装软件包“bigfloat”,但遇到了一些问题。 “bigfloat”包需要另外两个依赖项:1) mpfr 和 2) gmp。 我在这里安装了
我正在尝试在 python 2.7 中使用 Bigfloat 库。 from bigfloat import * f1 = Context(precision=2000) with precision
我想获取 BigFloat 的二进制数字数字。我认为最简单的方法是将数字转换为字节数组。在 this question有一种方法可以为 Float64 做到这一点,但是当我为 BigFloat 尝试相
我正在寻找一个快速的 BigFloat 单元,它可以处理加法、减法、乘法和除法(对数可以,但不是必需的),并且精度至少为 100 位小数。我试过this单位,但它比标准扩展操作慢大约 1,000 倍。
我不确定这是否是一个错误。但是我一直在玩big我不明白为什么这段代码会这样工作: https://carc.in/#/r/2w96 代码 require "big" x = BigInt.new(1
我想在 Julia 中对 BigFloats 数组执行 FFT,但到目前为止我无法实现。我找到了 FFTW.jl并按照他们的文档中的说明进行操作(importall FFTW 等)。遗憾的是,这没有帮
据我了解,阅读 Math::BigFloat 的文档,以下应该是对数字进行四舍五入的代码,但它似乎不起作用。 #!/usr/bin/perl use strict; use warnings; use
我正在尝试将 bigfloat Python 包安装到我的 mac 上,但我不太擅长这类事情。 我已经按照描述下载了最新的包 here .文档说: In order to use the bigflo
我正在尝试在 Windows 8 机器上为 python 3.4 安装 Bigfloat。我已经看到许多其他问题询问如何安装它,但似乎没有任何效果。 Pip 和 easy_install 给我错误:没
我将对键值对使用 Redis 的 INCRBYFLOAT 命令。但是,我从 BigFloat 类型中检索了值。我不确定我是否可以直接将 BigFloat 变量传递给该命令。如果不是,如何将其转换为普通
System.Numerics.BigInteger 可让您将大整数相乘,但是否有相同类型的 float ?如果没有,是否有我可以使用的免费图书馆? //this but with floats Sy
在 Julia 1.0.0 REPL 中,我得到以下结果: # Line 1: This make sense. I did not expect a Float64 to equal a BigF
F# 中是否有一种数据类型可以让我计算任意/大量小数位的 float ?类似于 BigInt 的 float 。 我想做类似的事情 myLargeFloat = 1.0/7.0 printfn "
好吧,从表面上看,我有一个简单的问题。我想将无理数的小数部分取到指定的位数并将其视为整数。例如,如果我的无理数是 2.657829……而我想要五位数字,那么我正在寻找 65782(尽管我实际上是在处理
我正在尝试在 Windows 7 机器上的 Python 3.2 中安装 bigfloat。文档说我首先需要安装 GMP 和 MPFR。我已经将这两个下载到我的 table 面(以及 bigflo
我正在尝试在 OSX Sierra 中安装 bigfloat: pip install bigfloat 但是我收到这个错误: mpfr.c:343:10: fatal error: 'gmp
我是一名优秀的程序员,十分优秀!