• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            羅朝輝(飄飄白云)

            關注嵌入式操作系統(tǒng),移動平臺,圖形開發(fā)。-->加微博 ^_^

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              85 隨筆 :: 0 文章 :: 169 評論 :: 0 Trackbacks
            一個求平方根倒數(shù)的函數(shù)(精度不高)
            /* 來自 Quake 3 的源碼 */
            float InvSqrt(float x)
            {
                
            float xhalf = 0.5f * x;
                
            int i = *(int*)&x;
                i 
            = 0x5f3759df - (i >> 1);
                x 
            = *(float*)&i;
                x 
            = x * (1.5f - xhalf * x * x);
                
            return x;
            }

            一個求平方根的函數(shù)(精度不高)
            /* 來自 Quake 3 的源碼 */
            float CarmSqrt(float x)
            {
                union {
                    
            int intPart;
                    
            float floatPart;
                } convertor;

                union {
                    
            int intPart;
                    
            float floatPart;
                } convertor2;

                convertor.floatPart  
            = x;
                convertor2.floatPart 
            = x;
                convertor.intPart    
            = 0x1FBCF800 + (convertor.intPart >> 1);
                convertor2.intPart   
            = 0x5f3759df - (convertor2.intPart >> 1);

                
            return 0.5f * (convertor.floatPart + (x * convertor2.floatPart));
            }

            字符串 hash 函數(shù)之一
            一個方便的 hash 函數(shù)應該散列的比較開,計算速度跟字符串長度關系不大,又不能只計算字符串的開頭或末尾。這里的算法是從 Lua 中看來的。
            unsigned 
            long hash(const char* name,size_t len)
            {
                unsigned 
            long h=(unsigned long)len;
                size_t step 
            = (len >> 5+ 1;
                
            for (size_t i = len; i >= step; i -= step)
                    h 
            = h ^ ((h << 5+ (h >> 2+ (unsigned long)name[i - 1]);
                    
                
            return h;
            }
             
            字符串 hash 函數(shù)之二
            unsigned 
            long hashInfoTable[0x500];
            void prepareHashInfoTable()
            {
                unsigned 
            long seed = 0x00100001, index1 = 0, index2 = 0, i;
                
            for( index1 = 0; index1 < 0x100; index1++ )
                {
                    
            for( index2 = index1, i = 0; i < 5; i++, index2 += 0x100 )
                    {
                        unsigned 
            long temp1, temp2;

                        seed 
            = (seed * 125 + 3% 0x2AAAAB;
                        temp1 
            = (seed & 0xFFFF<< 0x10;

                        seed 
            = (seed * 125 + 3% 0x2AAAAB;
                        temp2 
            = (seed & 0xFFFF);

                        hashInfoTable[index2] 
            = ( temp1 | temp2 );
                   }
               }
            }

            unsigned 
            long HashString(const char* lpszFileName, unsigned long dwHashType)
            {
                
            const char *key = lpszFileName;
                unsigned 
            long seed1 = 0x7FED7FED, seed2 = 0xEEEEEEEE;
                
            int ch;

                
            while(*key != 0)
                {
                    ch 
            = toupper(*key++);

                    seed1 
            = hashInfoTable[(dwHashType << 8+ ch] ^ (seed1 + seed2);
                    seed2 
            = ch + seed1 + seed2 + (seed2 << 5+ 3;
                }
                
                
            return seed1;
            }

            快速 
            double 轉整型
            union luai_Cast { 
            double l_d; long l_l; };
            #define lua_number2int(i,d) \
                { 
            volatile union luai_Cast u; u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; }

            RGB565 的 alpha 混合
            unsigned 
            short alpha_blender(unsigned int x, unsigned int y, unsigned int alpha)
            {
                x 
            = (x | (x << 16)) & 0x7E0F81F;
                y 
            = (y | (y << 16)) & 0x7E0F81F;
                unsigned 
            int result = ((x - y) * alpha / 32 + y) & 0x7E0F81F;
                
            return (unsigned short)((result&0xFFFF| (result >> 16));
            }
             
            UTF8 到 UTF16 的轉換(單個字符) 
            int UTF8toUTF16(int c)
            {
                signed 
            char* t= (signed char*)&c;
                
            int ret = *&0x0f | ((*>> 1& 0x1f| ~(*>> 7));
                assert ((
            *& 0xc0!= 0x80);
                
            for (int i = 1; i < 3; i++) {
                    
            if ((t & 0xc0!= 0x80) {
                        
            break;
                    }
                    ret 
            = (ret << 6| (t & 0x3f);
                }
                
            return ret;
            }

            取一個介于0~255之間隨機整數(shù)的函數(shù)
            static byte RndFactorA = 12;
            static byte RndFactorB = 45;
            int randInt()
            {
                RndFactorA 
            += (RndFactorB & 0xFF);
                RndFactorA 
            += (RndFactorB & 0xFF>>2 ;
                RndFactorB 
            ^= (RndFactorA & 0xFF);
                RndFactorB 
            += (RndFactorA & 0xFF>>1 ;
                
            return RndFactorA & 0xFF;
            }
            posted on 2010-06-04 18:38 羅朝輝 閱讀(741) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            国产成人精品久久亚洲| 777午夜精品久久av蜜臀| 久久精品成人国产午夜| 久久se精品一区精品二区国产| 久久精品无码一区二区日韩AV| 久久亚洲精品国产精品| 国产精品久久久久一区二区三区| 无码人妻久久一区二区三区蜜桃 | 国产精品99久久久精品无码| 久久亚洲中文字幕精品有坂深雪 | 99999久久久久久亚洲| 久久www免费人成精品香蕉| 久久久久无码精品国产| 麻豆国内精品久久久久久| 久久精品嫩草影院| 熟妇人妻久久中文字幕| 欧美成a人片免费看久久| 国内精品久久久久影院免费| 久久这里的只有是精品23| 国产巨作麻豆欧美亚洲综合久久| 99蜜桃臀久久久欧美精品网站| 久久久久亚洲AV成人网人人网站| 久久人爽人人爽人人片AV| 久久久国产视频| 久久笫一福利免费导航 | 久久人人爽人人爽人人片AV不| 久久这里都是精品| 一个色综合久久| 狠狠色婷婷久久一区二区| 一级做a爰片久久毛片看看| 久久青青草原精品国产不卡| 国产精品一区二区久久精品无码| 大香网伊人久久综合网2020| 国产精品青草久久久久婷婷| 国产精品99久久精品| 久久w5ww成w人免费| 久久国产精品久久| 精品久久久久中文字| 国产69精品久久久久观看软件 | 久久久99精品成人片中文字幕| 国产精品成人无码久久久久久 |