Excel精英培训网

 找回密码
 注册
楼主: Luckyguy2008

[失效] 数组兴趣小组练习题-001期(总结)

[复制链接]
发表于 2007-5-23 14:57 | 显示全部楼层

呵呵,那数字就是升序排列了,我是为了达到楼主列出的效果才套个INDEX的
回复

使用道具 举报

发表于 2007-5-23 23:12 | 显示全部楼层

<p> 既然Excel运算是用浮点计算,对小数部分计算会有浮点误差,我们通常用放大来处理,以避免浮点计算</p><p>的误差,那么我们放大多少为宜呢?</p>
[此贴子已经被作者于2007-5-24 8:35:58编辑过]
回复

使用道具 举报

发表于 2007-5-23 15:59 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>gvntw</i>在2007-5-23 15:18:22的发言:</b><br/><p>第3题:</p><p>我喜欢把数字扩大,使用整数计算,减少浮点运算的误差。</p><p>=INDEX(A:A,RIGHT(LARGE(data*10^10+ROW(data),ROW(1:1)),5))</p></div><p></p>有道理,这思路值得借鉴。
回复

使用道具 举报

发表于 2007-5-23 16:17 | 显示全部楼层

对数组公式不太了解,这是照着硬套的,公式太长了,不好意思!<br/>1、=IF(ROW()&gt;COUNT(IF(MATCH(data,data,0)=ROW(data)-1,ROW(data)-1))+1,"",INDEX(data,SMALL(IF(MATCH(data,data,0)=ROW(data)-1,ROW(data)-1),ROW(INDIRECT("1:"&amp;COUNT(IF(MATCH(data,data,0)=ROW(data)-1,ROW(data)-1)))))))<br/>2、=IF(ROW()&lt;=SUM((COUNTIF(data,data)=1)*1)+1,INDEX(name,SMALL(IF(((COUNTIF(data,data)=1)*1)*ROW($1:$12),((COUNTIF(data,data)=1)*1)*ROW($1:$12)+1),ROW()-1)-1),"")<br/>第三题还未考虑好。
回复

使用道具 举报

发表于 2007-5-23 20:09 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>gvntw</i>在2007-5-23 15:18:22的发言:</b><br/><p>第3题:</p><p>我喜欢把数字扩大,使用整数计算,减少浮点运算的误差。</p><p>=INDEX(A:A,RIGHT(LARGE(data*10^10+ROW(data),ROW(1:1)),5))</p></div><p><strong><em>gvntw 能不能给我们讲讲这</em></strong>浮点运算吧。我们不懂。</p>
回复

使用道具 举报

发表于 2007-5-23 20:44 | 显示全部楼层

来晚了。都快讨论完了..[em03]
回复

使用道具 举报

 楼主| 发表于 2007-5-23 21:56 | 显示全部楼层

还有很多可以讨论呢,比如说内存数组,我先抛块砖。<br/><br/>第一题=LOOKUP(SMALL(IF(MATCH(data,data,)=ROW(data)-1,ROW(data)),ROW(INDIRECT("1:"&amp;SUM(--(MATCH(data,data,)=ROW(data)-1))))),ROW(data),data)<br/>第一题=LOOKUP(SMALL(IF(COUNTIF(data,data)=1,ROW(data)),ROW(INDIRECT("1:"&amp;SUM(--(COUNTIF(data,data)=1))))),ROW(data),name)<br/>第一题=LOOKUP(--RIGHT(LARGE(data*10^10+ROW(data),ROW(data)-1),5),ROW(data),name)<br/>
回复

使用道具 举报

发表于 2007-5-23 22:07 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>杨副官</i>在2007-5-23 20:09:53的发言:</b><br/><div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>gvntw</i>在2007-5-23 15:18:22的发言:</b><br/><p>第3题:</p><p>我喜欢把数字扩大,使用整数计算,减少浮点运算的误差。</p><p>=INDEX(A:A,RIGHT(LARGE(data*10^10+ROW(data),ROW(1:1)),5))</p></div><p><strong><em>gvntw 能不能给我们讲讲这</em></strong>浮点运算吧。我们不懂。</p></div><p>在超级计算领域,“浮点计算(flops)”是一个缩写,意为“每秒浮点计算次数(FLoating point Operations Per Second)”,是一种计算机执行浮点计算能力的衡量手段。 </p><p>Excel也是使用浮点计算,用二进制来表示浮点和整数。先把十进制数字转换为二进制数字进行计算,再由编译器把计算结果转换为十进制,对于一些在二进制中无法精确表示的小数进行赋值或读入再输出时, 也就是从十进制转换为二进制再从二进制转换为十进制, 就会有精度的误差,这就是浮点计算的误差,如十进制的0.1,在二进制里是个无限循环小数0.0001100110011……</p>
回复

使用道具 举报

 楼主| 发表于 2007-5-23 22:13 | 显示全部楼层

我觉得此类问题的关键在于如何构造出结果序列的每行在原序列中的行号,得到这个行号序列后可以用Index、Offset或Lookup获得最后结果。
回复

使用道具 举报

 楼主| 发表于 2007-5-23 22:17 | 显示全部楼层

谢谢老师的剖析。我在您前天出的那题里面就亲身体会到这个浮点导致的问题。<br/>以后就知道了遇到类似第三题的情况,应该是用放大而不是缩小来处理。<br/><br/><div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>gvntw</i>在2007-5-23 22:07:23的发言:</b><br/><div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>杨副官</i>在2007-5-23 20:09:53的发言:</b><br/><div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>gvntw</i>在2007-5-23 15:18:22的发言:</b><br/><p>第3题:</p><p>我喜欢把数字扩大,使用整数计算,减少浮点运算的误差。</p><p>=INDEX(A:A,RIGHT(LARGE(data*10^10+ROW(data),ROW(1:1)),5))</p></div><p><strong><em>gvntw 能不能给我们讲讲这</em></strong>浮点运算吧。我们不懂。</p></div><p>在超级计算领域,“浮点计算(flops)”是一个缩写,意为“每秒浮点计算次数(FLoating point Operations Per Second)”,是一种计算机执行浮点计算能力的衡量手段。 </p><p>Excel也是使用浮点计算,用二进制来表示浮点和整数。先把十进制数字转换为二进制数字进行计算,再由编译器把计算结果转换为十进制,对于一些在二进制中无法精确表示的小数进行赋值或读入再输出时, 也就是从十进制转换为二进制再从二进制转换为十进制, 就会有精度的误差,这就是浮点计算的误差,如十进制的0.1,在二进制里是个无限循环小数0.0001100110011……</p></div><p></p>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-6 12:55 , Processed in 0.206945 second(s), 4 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表