小编Per*_*dor的帖子

2个给定数字之间的分数密度

我正在尝试对一个简单的Fraction类做一些分析,我想要一些数据来比较那个类型doubles.

问题

对,知道我正在寻找一些好的方法来获得2个数字之间的分数密度.馏分是基本上2点的整数(例如pair< long, long>),以及之间的密度st在该范围内可表示数的量.并且它需要是在O(1)或非常快的情况下完成的精确或非常好的近似.

为了使它更简单,假设我想要s和t之间的所有数字(不是分数)a/b,其中0 <= s <= a/b <t <= M,0 <= a,b < = M(b> 0,a和b是整数)

如果我的分数是一个只计数为6(M = 6)的数据类型,并且我希望密度在0和1之间,那么答案将是12.这些数字是:

0, 1/6, 1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6.
Run Code Online (Sandbox Code Playgroud)

我已经想到了什么

一种非常天真的方法是循环所有可能的分数,并计算那些不能简化的分数.就像是:

long fractionsIn(double s, double t){
    long density = 0;
    long M = LONG_MAX;
    for(int d = 1; d < floor(M/t); d++){
        for(int n = ceil(d*s); n < M; n++){
            if( gcd(n,d) == 1 …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm math fractions

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

TVar 构造函数?我找不到 TVar

我是 Haskell 和 stm 的新手,我想制作一个简单的 rwlock。首先,我创建了 4 个主要函数(wlock、wunlock、rlock、runlock),需要 2 个 TVar 整数:读取线程和写入线程的数量。

此时我无法按预期使用它。我尝试这样编译

v1 <- atomically(newTVar 0);
v2 <- atomically(newTVar 0);
wlock v1 v2 -- wlock :: TVar Integer -> TVar Integer -> IO ()
Run Code Online (Sandbox Code Playgroud)

这当然很丑陋,但它有效(不知道为什么,因为原子地返回IO (TVar a)而不是TVar a

我想要的是:

我试图通过隐藏价值观来让它变得更好。我在某处读到单子可能是可行的方法,但我还没有研究它们。相反,我尝试创建一个新类型的 Rwlock 作为

data Rwlock = Rwlock {  readCant :: TVar Integer 
    ,writeCant :: TVar Integer
}
Run Code Online (Sandbox Code Playgroud)

和一个构造函数,所以我可以做这样的事情:

import Rwlock

do{
    a = rwconst;
    forkIO(reader a);
    forkIO(writer a);
}
Run Code Online (Sandbox Code Playgroud)

rlock a读者和作者都会打电话的地方wlock a

问题: …

haskell stm tvar

-1
推荐指数
1
解决办法
159
查看次数

标签 统计

algorithm ×1

c++ ×1

fractions ×1

haskell ×1

math ×1

stm ×1

tvar ×1