Haskell 从双精度非科学符号列表创建字符串列表 listOfLongDeci=[showFFloat Nothing(1/a)| a7] listOfLongDeci2=[显示(1/a)| a 7] 清单3=[(1/a)| a 7] 第一个给出了一个节目列表,如何从节目中生成字符串 第二部分给出了科学符号的列表 第三只给出了一个列表 双打
我如何使用其中任何一个来创建非科学符号字符串列表?(): 第一个给出了Haskell 从双精度非科学符号列表创建字符串列表 listOfLongDeci=[showFFloat Nothing(1/a)| a7] listOfLongDeci2=[显示(1/a)| a 7] 清单3=[(1/a)| a 7] 第一个给出了一个节目列表,如何从节目中生成字符串 第二部分给出了科学符号的列表 第三只给出了一个列表 双打,haskell,floating-point,Haskell,Floating Point,我如何使用其中任何一个来创建非科学符号字符串列表?(): 第一个给出了显示的列表,如何从显示中生成字符串 由于ShowS是String->String的类型同义词,因此通过将函数应用于字符串,可以获得字符串。由于showXFloat函数产生一个函数,该函数在最后的String参数前面加上一些String(基本上是一个差异列表;许多show相关函数产生这样的-showChar,showString,仅举几例-),最后一个参数的自然选择是空的字符串,因此 listOfLongDeci = [show
显示的列表
,如何从显示中生成字符串
由于ShowS
是String->String
的类型同义词,因此通过将函数应用于字符串
,可以获得字符串。由于showXFloat
函数产生一个函数,该函数在最后的String
参数前面加上一些String
(基本上是一个差异列表;许多show
相关函数产生这样的-showChar
,showString
,仅举几例-),最后一个参数的自然选择是空的字符串
,因此
listOfLongDeci = [showFFloat Nothing (1/a) | a<-[2..1000], length (show (1/a)) > 7]
listOfLongDeci2 = [show (1/a) | a<-[2..1000], length (show (1/a)) > 7]
listOfLongDeci3 = [(1/a) | a<-[2..1000], length (show (1/a)) > 7]
精度的有效十进制数字,因此从第一个非零数字开始,您有15或16个数字,您可以预期这些数字对于分数1/d
的精确[终止或重复]十进制扩展是正确的,除此之外,扩展不同
例如,1/71
具有长度为35的循环周期014085070422535112676056338028169
(到目前为止,不是要考虑的范围内最长的)。与1/71
最接近的Double
表示为
Prelude> 53 * log 2 / log 10
15.954589770191001
其中前17位有效数字是正确的(并且0.01404507042253521
也是showFFloat Nothing(1/71)”“
给出的内容)
要在1/d
的十进制展开中找到最长的循环周期,可以使用Rational
数字1%d
的精确(或足够精确的有限)字符串表示,或者更好地使用纯整数算术(使用长除法计算十进制展开)不涉及Rational
也许你想要Text.Printf.Printf
showFFloat Nothing(1/a)”“
给你一个字符串
.thx,@DanielFischer,我想我试过了,但我一定是搞砸了up@DanielFischer关于提交评论作为回答的另一个唠叨:-)你设法迅速介入并对所有这些事情给出了简洁的答案,但是他们从来没有得到正式的回答,因为你已经处理好了。@sclv唠叨成功(至少这次),现在得到了正式的回答。
Prelude> 53 * log 2 / log 10
15.954589770191001
0.01408450704225352144438598855913369334302842617034912109375 = 8119165525400331 / (2^59)