如果可以输出一个 float ,这样就没有值的截断(例如使用setpercision)并且数字以固定表示法输出(例如使用fixed >) 保证 float 的整个小数部分可以存储在缓冲区中所需的缓冲区大小是多少?
我希望标准中有一些东西,比如 #define 或 numeric_limits 中的东西,它会告诉我小数的以 10 为底的最大值位置浮点类型的一部分。
我在这里询问了浮点类型的小数部分中以 10 为底的数字的最大数量:What Are the Maximum Number of Base-10 Digits in the Integral Part of a Floating Point Number
但我意识到这可能更复杂。例如,1.0/3.0 是一个无限重复的数字序列。当我使用 fixed 格式输出时,我在重复 0 之前得到了很多地方:
0.333333333333333314829616256247390992939472198486328125
但我不一定能说这是最大精度,因为我不知道浮点小数中实际表示了多少尾随 0,而且它没有被负指数向下移动。
我知道我们有min_exponent10这是我应该寻找的吗?
最佳答案
如果考虑 32 位和 64 位 IEEE 754 数字,可以按如下所述进行计算。
这都是关于 2 的负幂。所以让我们看看每个指数的贡献:
2^-1 = 0.5 i.e. 1 digit
2^-2 = 0.25 i.e. 2 digits
2^-3 = 0.125 i.e. 3 digits
2^-4 = 0.0625 i.e. 4 digits
....
2^-N = 0.0000.. i.e. N digits
因为 10 进制数总是以 5 结尾,你可以看到当指数减 1 时,10 进制数的位数增加 1。所以 2^(-N) 将需要 N 位
另请注意,在添加这些贡献时,结果位数由最小数字决定。因此,您需要找出可以贡献的最小指数。 对于 32 位 IEEE 754,您有: 最小指数-126 分数位 23 所以最小的指数是 -126 + -23 = -149,所以最小的贡献将来自 2^-149,即 For 32 bit IEEE 754 printed in base-10 there can be 149 fractional digits 对于 64 位 IEEE 754,您有: 最小指数-1022 分数位 52 所以最小的指数是 -1022 + -52 = -1074,所以最小的贡献将来自 2^-1074,即 For 64 bit IEEE 754 printed in base-10 there can be 1074 fractional digits
关于c++ - float 的小数部分最多有多少位 10 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39834989/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
当谈到运行时自省(introspection)和动态代码生成时,我认为ruby没有任何竞争对手,可能除了一些lisp方言。前几天,我正在做一些代码练习来探索ruby的动态功能,我开始想知道如何向现有对象添加方法。以下是我能想到的3种方法:obj=Object.new#addamethoddirectlydefobj.new_method...end#addamethodindirectlywiththesingletonclassclass这只是冰山一角,因为我还没有探索instance_eval、module_eval和define_method的各种组合。是否有在线/离线资
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in
给定一个数组a,什么是实现其组合直到第n的最佳方法?例如:a=%i[abc]n=2#Expected=>[[],[:a],[:b],[:c],[:a,b],[:b,:c],[:c,:a]] 最佳答案 做如下:a=%w[abc]n=30.upto(n).flat_map{|i|a.combination(i).to_a}#=>[[],["a"],["b"],["c"],["a","b"],#["a","c"],["b","c"],["a","b","c"]] 关于ruby-最多n的组合,我
我刚刚安装了带有RVM的Ruby2.2.0,并尝试使用它得到了这个:$rvmuse2.2.0--defaultUsing/Users/brandon/.rvm/gems/ruby-2.2.0dyld:Librarynotloaded:/usr/local/lib/libgmp.10.dylibReferencedfrom:/Users/brandon/.rvm/rubies/ruby-2.2.0/bin/rubyReason:Incompatiblelibraryversion:rubyrequiresversion13.0.0orlater,butlibgmp.10.dylibpro
我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“
我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da