• <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>

            戰(zhàn)魂小筑

            討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

               :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

            前面一片文章中l(wèi)ua出現(xiàn)的bug,其實是lua本身結構問題導致的:

            lua中,數(shù)值使用double來存儲,包含整形和double。而解析出來的整形也是被強轉為double進行存儲,這樣就會出問題。

            舉一個簡單的例子:

            double f = (double)0xffffffff;
            int a = int(f);

            a肯定不是-1

            這里的文章說明這個類型轉換問題的緣由。

             

            Squirrel腳本中就不會有這個問題

            local a = 0xffffffff

            print( a )

            結果為-1

            查看其源代碼:

            typedef union tagSQObjectValue
            {
                struct SQTable *pTable;
                struct SQArray *pArray;
                struct SQClosure *pClosure;
                struct SQGenerator *pGenerator;
                struct SQNativeClosure *pNativeClosure;
                struct SQString *pString;
                struct SQUserData *pUserData;
                SQInteger nInteger;
                SQFloat fFloat;
                SQUserPointer pUserPointer;
                struct SQFunctionProto *pFunctionProto;
                struct SQRefCounted *pRefCounted;
                struct SQDelegable *pDelegable;
                struct SQVM *pThread;
                struct SQClass *pClass;
                struct SQInstance *pInstance;
                struct SQWeakRef *pWeakRef;
                SQRawObjectVal raw;
            }SQObjectValue;

             

            可以看到

            SQInteger nInteger;
            SQFloat fFloat;

            是分開存儲的,因此就不會有這個問題

             

            lua解決方法:

            1. 將十六進制換為10進制存儲

            2. 等待大俠或者官方修改代碼,做出patch

            posted on 2010-02-04 12:49 戰(zhàn)魂小筑 閱讀(7955) 評論(9)  編輯 收藏 引用 所屬分類: 腳本技術程序調試技術C++/ 編程語言

            評論

            # re: Lua腳本浮點轉整形bug分析 2010-02-04 14:02 LOGOS
            兩者是不同的
            1 ->
            int i = 0xFFFFFFFF;
            double d = (double)i; // d = -1
            int a = (int)d; // a = -1

            2 ->
            double d = (double)0xFFFFFFFF; // d = 4294967295
            int a = (int)d; // a overflow  回復  更多評論
              

            # re: Lua腳本浮點轉整形bug分析 2010-02-04 14:28 LOGOS
            lua_pushinteger(L, ptrdiff_t)
            第二個參數(shù)是ptrdiff_t,不是int
            我比較感興趣你是在什么平臺下編譯的,32位?64位?
            編譯器是什么,VC?gcc?  回復  更多評論
              

            # re: Lua腳本浮點轉整形bug分析 2010-02-04 17:34 Davy.xu
            @LOGOS

            VC,32位
              回復  更多評論
              

            # re: Lua腳本浮點轉整形bug分析 2010-02-04 17:47 黃路易
            我懷疑是你的lua嵌入代碼或者編譯環(huán)境的問題,因為在純lua的命令行中沒有你上一篇文章的問題,或者你看看我寫的這篇?
            http://www.hlouis.com/develop/lua-cant-do-math/
            不知道有沒有幫助  回復  更多評論
              

            # re: Lua腳本浮點轉整形bug分析 2010-02-04 17:58 LOGOS
            @黃路易
            可能是優(yōu)化問題
            把lua_pushinteger((double)(int)0xFFFFFFFF)
            優(yōu)化成了
            lua_pushinteger((double)0xFFFFFFFF)

            Davy跟一下匯編,然后貼出來看看  回復  更多評論
              

            # re: Lua腳本浮點轉整形bug分析 2010-02-04 19:14 Davy.xu
            @黃路易
            在lua虛擬機內部的數(shù)字,和你用print打出來都是“貌似"對的
            這個問題,我朋友項目也發(fā)生過,做法就是全用整數(shù)  回復  更多評論
              

            # re: Lua腳本浮點轉整形bug分析 2010-02-04 19:18 Davy.xu
            @LOGOS
            你的這段代碼我試過,不管用的
            我現(xiàn)在工程里已經(jīng)解決這個問題,還是得用整數(shù),就是看起來非十六進制的顏色很惡心
              回復  更多評論
              

            # re: Lua腳本浮點轉整形bug分析 2010-02-22 14:11 Quon
            這個問題的原因是DirectX修改了系統(tǒng)行為強制把浮點數(shù)定為單精度,造成lua整型的范圍變小了  回復  更多評論
              

            # re: Lua腳本浮點轉整形bug分析 2010-02-23 08:56 Davy.xu
            @Quon
            這個例子中并沒有使用到DX  回復  更多評論
              

            亚洲va久久久噜噜噜久久| 狠狠色丁香久久综合五月| 久久午夜免费视频| 国产精品久久久亚洲| 91精品日韩人妻无码久久不卡| A级毛片无码久久精品免费| 无码8090精品久久一区| 久久久精品人妻一区二区三区四 | 久久成人18免费网站| 亚洲国产婷婷香蕉久久久久久| 亚洲国产精品无码久久一区二区| 69国产成人综合久久精品| 三级韩国一区久久二区综合| 午夜精品久久久久久中宇| 91精品国产91热久久久久福利| 中文字幕日本人妻久久久免费| 99久久亚洲综合精品成人| 久久久久AV综合网成人| 亚洲色欲久久久久综合网| 精品久久久久久无码中文字幕| 久久婷婷五月综合97色一本一本| 国产亚洲美女精品久久久| 久久精品一本到99热免费| 久久人与动人物a级毛片| 久久久久亚洲AV成人网| 久久综合久久综合久久| 日韩av无码久久精品免费| 久久毛片一区二区| 欧美亚洲国产精品久久久久| 国产激情久久久久影院老熟女免费| 久久无码人妻一区二区三区午夜| 亚洲国产一成久久精品国产成人综合| 国产精品亚洲美女久久久| 久久精品国产免费一区| 91久久精一区二区三区大全| 国内精品久久久人妻中文字幕| 无码精品久久久久久人妻中字| 久久久久久久久久久久久久| 久久精品人妻中文系列| 天天爽天天狠久久久综合麻豆| 久久亚洲日韩精品一区二区三区|