为什么打印的负数为-147982099而不是8462696833 = 600851475143/71
import Data.List
smallFactor n = case (elemIndex 0 (map (mod n) [2..])) of
Just x -> x + 2
main = print( quot n (smallFactor n) )
where n = 600851475143
Run Code Online (Sandbox Code Playgroud)
完整输出:
$ ghc --make p3; ./p3
[1 of 1] Compiling Main ( p3.hs, p3.o )
Linking p3 ...
-147982099
Run Code Online (Sandbox Code Playgroud) 对于用户级线程,有 N 个用户级线程运行在单个内核线程之上。这与 pthreads 形成对比,在 pthreads 中只有一个用户线程在内核线程上运行。
N 个用户级线程被抢占地调度在单个内核线程上。但是如何做到这一点的细节是什么。
我听说有人建议线程库进行设置,以便内核发送信号,这是将执行从单个用户级线程拉到信号处理程序然后可以进行抢占式调度的机制。
但是如何保存和/或改变状态(例如寄存器和线程结构)以使这一切正常工作的细节是什么?是否有一个非常简单的用户级线程对学习细节很有用?
据我所知,使新的项目yosog和yosog2我做了以下
$ yesod init
$ cd yosog
yosog$ cabal sandbox init
yosog$ cabal install
$ yesod init
$ cd yosog2
yosog2$ cabal sandbox init
yosog2$ cabal install
Run Code Online (Sandbox Code Playgroud)
但每一个都cabal install需要永远.如果每个项目都需要永久编译,我怎么想制作一堆Yesod项目呢?
我试图理解Coroutines但是由于forkIO存在线程,所以我不太了解它们的用途.什么用例确实需要在线程上使用协同程序?
是否有一本非常好的书深入介绍:两阶段提交,paxos以及实现一致性,可用性,分区容错的限制.
浏览亚马逊,看到甚至不包括paxos的分布式系统书籍的数量是惊人的.
PyPy 是否在编译时进行静态类型检查以在编译时捕获类型错误?如果没有,HM 类型推断之类的东西是否有助于在编译时捕获这些错误?
下面的全文是关于每个计算机科学家应该知道的关于浮点运算的第8页.在下文中,陈述"通常,当基数为b时,以ulps表示的固定相对误差可以摆动多达b的因子."
有人可以给出详细的证明吗?它究竟是什么意思"以ulps表示的固定相对误差可以摆动多达b的因子."; 如果相对误差是固定的,那么它如何摆动或改变?
相对误差总是由e限定,e被称为机器epsilon.
...
为了说明ulps和相对误差之间的差异,请考虑实数x = 12.35.它近似于
= 1.24 x 10 ^ 1.误差为0.5 ulps; 相对误差为0.8 e.接下来考虑计算8x.确切的值是8 x = 98.8,而计算值是8
= 9.92 x 10 ^ 1.错误现在是4.0 ulps,但相对误差仍然是0.8 e.即使相对误差相同,以ulps测量的误差也要大8倍.通常,当基数为b时,以ulps表示的固定相对误差可以摆动直至b的因子.相反,如同eq.(2)显示,1/2 ulps的固定误差导致可以通过b摆动的相对误差.
《Learn You Some Erlang》一书有以下代码。为什么本书有时只使用超时,有时同时使用监视器和超时?在下面,由于超时将有效地检测进程是否已关闭,因此监视器需要什么?
%% Synchronous call
order_cat(Pid, Name, Color, Description) ->
Ref = erlang:monitor(process, Pid),
Pid ! {self(), Ref, {order, Name, Color, Description}},
receive
{Ref, Cat} ->
erlang:demonitor(Ref, [flush]),
Cat;
{'DOWN', Ref, process, Pid, Reason} ->
erlang:error(Reason)
after 5000 ->
erlang:error(timeout)
end.
Run Code Online (Sandbox Code Playgroud)
另请比较以下add_event不使用显示器但subscribe使用显示器的情况
subscribe(Pid) ->
Ref = erlang:monitor(process, whereis(?MODULE)),
?MODULE ! {self(), Ref, {subscribe, Pid}},
receive
{Ref, ok} ->
{ok, Ref};
{'DOWN', Ref, process, _Pid, Reason} ->
{error, Reason}
after 5000 ->
{error, …Run Code Online (Sandbox Code Playgroud) 我读从文件看起来像琴弦"2015-06-06T01:51:49-06:00"成乔达时间 DateTime对象.但是DateTime不按我想要的方式行事.
import org.joda.time.DateTime;
System.out.println("2015-06-06T01:51:49-06:00");
System.out.println(new DateTime("2015-06-06T01:51:49-06:00"));
Run Code Online (Sandbox Code Playgroud)
结果如下
2015-06-06T01:51:49-06:00
2015-06-06T00:51:49.000-07:00
Run Code Online (Sandbox Code Playgroud)
后来我需要小时和分钟.这将是1:51.但DateTime是在我猜的不同时区打印出来的吗?如何打印DateTime2015-06-06T01:51:49.000-06:00
模板Haskell 的文档说QuasiQuoter定义为
data QuasiQuoter = QuasiQuoter { quoteExp :: String -> Q Exp,
quotePat :: String -> Q Pat,
quoteType :: String -> Q Type,
quoteDec :: String -> Q [Dec] }
Run Code Online (Sandbox Code Playgroud)
我遇到过silly如下所示的例子.他们如何工作因为他们似乎并没有填写quotePat,quoteType和quoteDec领域?
silly :: QuasiQuoter
silly = QuasiQuoter { quoteExp = \_ -> [| "yeah!!!" |] }
Run Code Online (Sandbox Code Playgroud)