Does this mean that Java Math.floor is extremely slow?

后端 未结 5 1622
花落未央
花落未央 2020-12-15 19:44

I don\'t Java much.

I am writing some optimized math code and I was shocked by my profiler results. My code collects values, interleaves the data and then chooses th

5条回答
  •  有刺的猬
    2020-12-15 20:47

    Here's a sanity check for your hypothesis that the code is really spending 99% of its time in floor. Let's assume that you have Java and C++ versions of the algorithm that are both correct in terms of the outputs they produce. For the sake of the argument, let us assume that the two versions call the equivalent floor functions the same number of times. So a time function is

    t(input) = nosFloorCalls(input) * floorTime + otherTime(input)
    

    where floorTime is the time taken for a call to floor on the platform.

    Now if your hypothesis is correct, and floorTime is vastly more expensive on Java (to the extent that it takes roughly 99% of the execution time) then you would expect the Java version of the application to run a large factor (50 times or more) slower than the C++ version. If you don't see this, then your hypothesis most likely is false.


    If the hypothesis is false, here are two alternative explanations for the profiling results.

    1. This is a measurement anomaly; i.e. the profiler has somehow got it wrong. Try using a different profiler.

    2. There is a bug in the Java version of your code that is causing it to call floor many, many more times than in the C++ version of the code.

提交回复
热议问题