贴一个读者来信

      读者hasae前不久来信指出了关于此前一篇博客http://blog.csdn.net/pennyliang/archive/2010/10/28/5971059.aspx的错误。开始我并没有意识到,虽然仔细考虑了一下,后来他设计了一个实验,快速证明了我的错误,我觉得他的实验写得很好,我贴了出来。我这篇博客的错误在于混用了计算斐波那契的下标和展开的层数这两个变量,我已经在博客中做了修改。

      读者hasae的来信也有点小错误F=F[i-1]+F[i-2]; ->F[i] = F[i-1]+F[i-1]。大家可以用改过的方法继续实验怎样的展开层数是当前机器最佳的。我试了下发现我的测试机比hasae的强好多啊。

      以上错误感谢读者hasae的指出,非常感谢。

///以下是读者hasae来信的节选/

我将 M_3部分修改如下:
        #ifdef M_3
        int r= Fx%16;
        int idx = Fx/16;
        int i=2;
        int spread_count = 0;
        for(;i<idx;)
        {
                DO16(F=F[i-1]+F[i-2];i++;spread_count++;); //展开成16段代码
        }
        printf("After spreading spread_count=%d/n", spread_count);
        int loop_count = 0;
        for(;i<Fx;i++)
        {
                F=F[i-1]+F[i-2];
                loop_count++;
        }
        printf("loop_count=%d/n", loop_count);
        #endif
编译为方式为:g++ main.cpp  -g -o test  -D M_3
测试方式为:./test  35
结果为:
After spreading spread_count=0
LoopCount=33
run tick count:74996043
ret:9227465

bug原因:
        for(;i<idx;)
        {
                DO16(F=F[i-1]+F[i-2];i++;spread_count++;); //展开成16段代码
        }
        你的本意为每展开16次,指示变量i只能+1,但是由于i也用于循环展开,故每展开一次,
        i的值增加16,例如测试数量为时,idx=2.
        此外,此程序在测试数量为17时,idx=1,i<idx不成立(i=2),计算根本就没展开。

        此种思路的修改方式为:另设一指示变量j
        int j=0;
        int idx = (Fx-2)/16;//必须-2,否则可能出现内存问题,如N=MAX时。
        for(; j<idx; ++j)
        {
                DO16(F=F[i-1]+F[i-2];i++;spread_count++;); //展开成16段代码
        }

        我认为最好的修改方式为:
        #ifdef M_3
        ... ...
        int idx = Fx-16-2;//仅修改此处即可,也不用作除法
        ... ...
        #endif

*/

以下是一个简单的网页设计代码,包括 HTML 和 CSS: HTML 代码: ```html <!DOCTYPE html> <html> <head> <title>我的网页</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="style.css"> </head> <body> <header> <h1>欢迎来到我的网页</h1> <nav> <ul> <li><a href="#">首页</a></li> <li><a href="#">关于我</a></li> <li><a href="#">联系我</a></li> </ul> </nav> </header> <main> <section> <h2>我的介绍</h2> <p>我是一名学生,喜欢编程和设计。</p> <p>欢迎来信交流,我的邮箱是:example@example.com。</p> </section> <section> <h2>我的作品</h2> <ul> <li><a href="#">作品1</a></li> <li><a href="#">作品2</a></li> <li><a href="#">作品3</a></li> </ul> </section> </main> <footer> <p>版权所有 © 2021 我的网页</p> </footer> </body> </html> ``` CSS 代码(style.css): ```css /* 全局样式 */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: "Helvetica Neue", Arial, sans-serif; font-size: 16px; line-height: 1.5; color: #333; } /* 头部样式 */ header { background-color: #f5f5f5; padding: 20px; } h1 { font-size: 36px; font-weight: 700; margin-bottom: 10px; } nav ul { list-style: none; display: flex; } nav li { margin-right: 20px; } nav a { color: #333; text-decoration: none; font-size: 18px; } nav a:hover { color: #666; } /* 主体样式 */ main { padding: 20px; } section { margin-bottom: 40px; } h2 { font-size: 24px; font-weight: 700; margin-bottom: 10px; } p { margin-bottom: 20px; } ul { list-style: disc; margin-left: 20px; } ul li { margin-bottom: 10px; } ul li a { color: #333; text-decoration: none; } ul li a:hover { color: #666; } /* 底部样式 */ footer { background-color: #f5f5f5; padding: 20px; text-align: center; } ``` 这是一个简单的网页设计,您可以根据需要进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值