标签: rational-number

指定 Raku 中序列的显式生成器上的小数位数

我写了一个简单的代码:

\n
sub euler-ex ($x) of Seq {\n   1, { $x**++$ / [\xc3\x97] 1 .. ++$ } ... Inf }\nsay " 5: " ~ euler-ex(5)[^20]  ~ " = " ~ [+](euler-ex(5)[^20]);\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
5: 1 5 12.5 20.833333 26.041667 26.041667 21.701389 15.500992 9.68812 5.382289 2.6911445 1.22324748 0.50968645 0.19603325 0.07001187499 0.023337291662 0.0072929036444 0.00214497166011 0.000595825461143 0.000156796173985 = 148.41310786833832\n
Run Code Online (Sandbox Code Playgroud)\n

如何指定该输出的位数,即来自序列的显式生成器的小数位数?

\n

rational-number sequence significant-digits raku

10
推荐指数
2
解决办法
145
查看次数

将任意精度有理数(OCaml,zarith)转换为近似浮点数

我正在使用Zarith库来进行任意精度的有理算术.假设我有一个有理数q的类型Q.t,即两个大整数的比率(Q是Zarith的任意精度有理数模块).有时,为了便于阅读,我想将此数字打印为浮点数,有时我需要将此数字浮点数转换为以后的非任意精度计算.有没有办法将q浮点数转换为一定的精度?

我转换q为浮点的方式现在无法保证,并且可以创建未定义的浮点数(Z是任意精度整数模块):

let to_float q =
  let n, d = num q, den q in
  (* check if d is zero and raise an error if it is *)
  let nf, df = Z.to_float n, Z.to_float d in
  nf /. df
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理这个问题,我可以获得最准确接近任何浮点数的浮点数q

编辑

如果有人有兴趣,我很快就会在OCaml中写下Mark Dickinson的回答.它可能(绝对)可以改进和清理.如果我这样做,或者如果有人有任何改进建议,我会编辑.但是现在这已经解决了我的问题!

let to_float q = 
  let n, d = num q, den q in
  let n_sign = Z.sign n in …
Run Code Online (Sandbox Code Playgroud)

floating-point rational-number ocaml arbitrary-precision

8
推荐指数
1
解决办法
760
查看次数

如何将Rational转换为"漂亮"的字符串?

我想Rational在它们的十进制扩展中显示一些值.也就是说3 % 4,我宁愿显示,而不是显示0.75.我希望这个功能是类型的Int -> Rational -> String.第一种Int是指定最大小数位数,因为Rational扩展可能是非终止的.

HoogleData.Ratio黑线鳕没有帮助我.我在哪里可以找到这个功能?

formatting rational-number haskell

7
推荐指数
3
解决办法
1198
查看次数

作为有理数的浮点数的精确值

我正在寻找一种将浮点数的精确值转换为两个整数有理商的方法,即a / b其中b不大于指定的最大分母b_max。如果b <= b_max不可能满足条件,则结果回退到仍然满足条件的最佳近似值。

坚持,稍等。这里有很多关于截断实的最佳有理近似的问题/答案,该数表示为浮点数。但是,我对浮点数的确切值感兴趣,它本身就是一个具有不同表示形式的有理数。更具体地说,浮点数的数学集合是有理数的子集。在 IEEE 754 二进制浮点标准的情况下,它是二元有理数的子集。无论如何,任何浮点数都可以转换为两个有限精度整数的有理商,如。a / b

因此,例如假设 IEEE 754 单精度二进制浮点格式,有理等价的float f = 1.0f / 3.0f不是1 / 3,而是11184811 / 33554432。这是 的精确f,它是来自 IEEE 754 单精度二进制浮点数数学集合的一个数字。

根据我的经验,遍历(通过二分搜索)Stern-Brocot 树在这里没有用,因为当它被解释为截断的实数而不是精确的浮点数时,这更适合于逼近浮点数的值理性的

可能,连分数是要走的路。

这里的另一个问题是整数溢出。想想我们要把有理数表示为二的商int32_t,其中最大的分母b_max = …

c++ floating-point rational-number numerical-methods continued-fractions

6
推荐指数
1
解决办法
1782
查看次数

如何在DXL脚本中使用枚举?

我想测试DOORs对象的枚举属性的值.如何才能做到这一点?我在哪里可以找到描述这样基本功能的DXL文档?

if (o."Progress" == 0) // This does NOT work
{
  // do something
}
Run Code Online (Sandbox Code Playgroud)

rational-number ibm-doors

5
推荐指数
1
解决办法
6329
查看次数

通过舍入来提升rational_cast?

如何rational_cast<int64_t>进行舍入?

目前我正在做这样的黑客攻击:

boost::rational<int64_t> pts = ..., time_base = ...;
int64_t rounded = std::llround(boost::rational_cast<long double>(pts / time_base)); 
Run Code Online (Sandbox Code Playgroud)

但我希望能够"正确"地做到这一点而不涉及浮点.

c++ rational-number boost rounding

5
推荐指数
1
解决办法
151
查看次数

用Python解决有理数线性规划问题

我有一个带有整数约束的 LP,我想使用 Python 以精确算术求解它。其实我只需要一个可行点。

编辑:“精确算术”这里指的是无界枚举数和分母的有理数。

之前的尝试:

速度只是一个中等问题。我的较大实例有大约 500 个带有框约束的变量和 40 个等式,但涉及的数量可能很大。

python algorithm rational-number linear-programming

5
推荐指数
1
解决办法
743
查看次数

为什么在 Haskell 中添加两个有理数时会得到这个结果

考虑这个简短的 GHCi 会议:

ghci> import Data.Ratio
ghci> import Data.Word
ghci> 128 % 3 + 127 % 3 :: Ratio Word8
253 % 9
Run Code Online (Sandbox Code Playgroud)

为什么结果是253 % 9而不是255 % 3 (= 85 % 1)

这确实是我的问题,但我很乐意详细说明。


首先,如果我删除类型,结果就是我所期望的:

ghci> 128 % 3 + 127 % 3
85 % 1
Run Code Online (Sandbox Code Playgroud)

类型Word8似乎很重要。我知道潜在的整数溢出,但即便如此,我也无法理解结果。例如

ghci> 128 + 127 :: Word8
255
Run Code Online (Sandbox Code Playgroud)

这里没有溢出。这首先发生在

ghci> 128 + 128 :: Word8
0
ghci> 128 + 129 :: Word8
1
Run Code Online (Sandbox Code Playgroud)

如果我除以二而不是三,我仍然可以理解结果:

ghci> 128 % 2 + …
Run Code Online (Sandbox Code Playgroud)

rational-number haskell

5
推荐指数
1
解决办法
198
查看次数

为什么numpy行列式在给定分数矩阵时不返回分数?

我想对有理矩阵进行操作.我用的是模块numpyfractions.

这是我的代码:

import numpy as np
from fractions import Fraction

m=np.matrix([[Fraction(1, 6), Fraction(8, 7)], [Fraction(1, 2), Fraction(3, 2)]])
print(np.linalg.det(m))
# Gives -0.321428571429

print(m[0,0]*m[1,1] - m[0,1]*m[1,0])
# Gives -9/28
Run Code Online (Sandbox Code Playgroud)

由于计算行列式只需要用高斯方法进行合理运算,因此有理矩阵的行列式是合理的.

所以我的问题是:为什么numpy会返回一个浮点而不是一个Fraction?我怎样才能得到理性的决定因素?

请注意,此矩阵上的其他操作可提供合理的输出(例如m.trace()).

python rational-number numpy matrix

4
推荐指数
1
解决办法
4465
查看次数

有理数在 Julia 中是如何实现的

分子和分母是否存储为整数?具体来说,基本运算:和、减、乘、除是如何实现的?

rational-number programming-languages julia

4
推荐指数
1
解决办法
290
查看次数