小编Den*_*der的帖子

丑陋的双打 - 为什么2.9000000000000004而不是2.9?

当我在ghci做5.2 - 2.3时,我会得到2.9000000000000004而不是2.9.当使用Double或Float时,这样的丑陋(以及人类的错误)结果也显示在其他地方.

为什么会这样?(这只是为了好奇,而不是我真正的问题)

我真正的问题是:我如何告诉ghci不这样做,并像任何其他编程语言(和计算器)一样显示双打操作的结果,就像每个15岁的人一样写它们?

当我使用ghci作为一个不错的计算器并处理我执行此类操作的列表时,这真烦人.

map ((-)2.3) [4.0, 3.8, 5.2, 6.4, 1.3, 8.3, 13.7, 9.0, 7.5, 2.4]
[-1.7000000000000002,-1.5,-2.9000000000000004,-4.1000000000000005,0.9999999999999998,-6.000000000000001,-11.399999999999999,-6.7,-5.2,-0.10000000000000009]
Run Code Online (Sandbox Code Playgroud)

这在后来使用纸张上的数字时无效

提前致谢 :)

haskell

7
推荐指数
2
解决办法
973
查看次数

这是Ghc(i)Bug?!,19 - 1不等于18?

请帮我理解这个:

我想为一个"商组"生成所有素数根(我希望这是英语中的"素数Restklassengruppe";))

import Data.List (nub)  
primeroots rclass = filter (\(x,y) -> (18) == y) produceAllCandidates where
  produceAllCandidates = map makeOneCandidate [1..rclass] where
    makeOneCandidate elem = (elem,  (length (nub (map (\x -> (mod (elem ^ x) rclass)) [0..(rclass -1)]))))
Run Code Online (Sandbox Code Playgroud)

然后我在ghci中运行它并得到

> primeroots 19
> [(2,18),(3,18),(10,18),(13,18),(14,18),(15,18)]
Run Code Online (Sandbox Code Playgroud)

但是如果我将第一行中的18更改为rclass - 1(它应该产生18,并且除了15之外的所有这些都是这样做):

primeroots rclass = filter (\(x,y) -> (rclass - 1) == y) produceAllCandidates where
Run Code Online (Sandbox Code Playgroud)

并使用相同的参数运行它

> primeroots 19
> [(2,18),(3,18),(10,18),(13,18),(14,18)]
Run Code Online (Sandbox Code Playgroud)

当我把它改成18(rclass - 1)时,为什么我得到不同的结果,那么rclass将是19(然后应该使(rclass -1)18?

提前致谢

haskell

2
推荐指数
1
解决办法
109
查看次数

标签 统计

haskell ×2