java吧 关注:1,190,895贴子:12,602,957
  • 14回复贴,共1

关于卡马克的开方算法

只看楼主收藏回复

之前在阿b了解到卡马克的开发算法很快,但是经过Java实现后发现运行速度比Java提供的开方要慢很多,这是怎么回事



IP属地:广东来自Android客户端1楼2023-02-24 12:21回复
    这是我在电脑运行的结果,感觉比手机运行更慢
    卡马克开方:22
    0.8247619
    java开方:2
    0.82340753


    IP属地:广东来自Android客户端2楼2023-02-24 12:22
    回复
      是因为我的代码跟cpu之间隔了个虚拟机吗,还是说Java用了更快的算法


      IP属地:广东来自Android客户端3楼2023-02-24 12:24
      回复
        一个猜测,java的sqrt在源码中是native方法,极有可能是使用了c++实现,你本地kafa用java实现的,需要先解析字节码,然后执行。


        IP属地:江西来自Android客户端4楼2023-02-24 12:44
        回复
          native方法是这样的


          IP属地:广东来自Android客户端5楼2023-02-24 13:25
          回复
            你预热一下,看看jit之后差距还大不大


            IP属地:北京来自Android客户端6楼2023-02-24 20:48
            回复
              我自己拿c也比较过,目前卡马克的算法已经比libc里的算法慢了。
              原因在硬件,那个年代的很多cup甚至没有专门的浮点运算单元,这些大佬们只能靠软件搞出一套高效的算法。现在cpu进行浮点运算也就靠几条汇编指令。


              IP属地:浙江来自Android客户端7楼2023-02-24 23:33
              回复
                现代cpu已经将近似倒平方根集成到SSE和AVX指令集中,不需要程序员手动编写代码实现了


                IP属地:北京来自Android客户端8楼2023-02-25 16:37
                回复
                  软硬结合才是算法的极限


                  IP属地:上海来自Android客户端9楼2023-02-26 07:26
                  回复
                    时代变了,当年纯粹是没有浮点运算优化


                    IP属地:浙江来自Android客户端10楼2023-02-26 09:53
                    收起回复
                      我不懂java,不过我觉得可能是底层硬件优化了,所以你自己写的代码效率不如直接提供给你的代码


                      IP属地:浙江来自Android客户端11楼2023-02-26 11:46
                      回复
                        现在开方都是硬件实现,不需要软件算法手动做了,你做了也不会比硬件快。


                        IP属地:上海来自iPhone客户端12楼2023-02-26 11:53
                        回复