Float or Double?

前端 未结 8 1860
北海茫月
北海茫月 2020-12-29 20:36

Which is faster, double or float, when preforming arithimic (+-*/%), and is it worth just using float for memory reasons? Precision is not an issue much of an issue.

相关标签:
8条回答
  • 2020-12-29 21:34

    I wondered about this too and wrote a small test:

    #include <iostream>
    #include <chrono>
    
    template<typename numType>
    void test(void)  {
        std::cout<< "Size of variable: " << sizeof(numType) << std::endl;
        numType array[20000];
    
        auto t1 = std::chrono::high_resolution_clock::now();
        // fill array
        for( numType& number : array ) {
            number = 1.0014535;
        }
    
        auto t2 = std::chrono::high_resolution_clock::now();
    
        // multiply each number with itself 10.000 times
        for( numType& number : array ) {
            for( int i=0; i < 10000 ; i++ )  {
                number *= number;
            }
        }
    
        auto t3 = std::chrono::high_resolution_clock::now();
    
        auto filltime = t2 - t1;
        auto calctime = t3 - t2;
    
        std::cout<< "Fill time: " << filltime.count() << std::endl;
        std::cout<< "Calc time: " << calctime.count() << std::endl;
    }
    
    int main(int argc, char* argv[]) {
        test<float>();
        test<double>();
    }
    

    I ran and compiled it under Ubuntu 12.04 x64 using GCC on an Intel i7 3930k processor

    These were the results:

    Size of variable: 4
    Fill time: 69
    Calc time: 694303
    
    Size of variable: 8
    Fill time: 76
    Calc time: 693363
    

    Results were reproducable. So memory allocation for double takes slightly longer but the actual calculation time is exactly the same.


    Out of curiousity I also ran and compiled it under Windows 7 x64 using Visual Studio 2012 in release mode on an intel i7 920 processor

    (The unit of the time is different so don't compare the results above to these: it is only valid for internal comparison)

    Size of variable: 4
    Fill time: 0
    Calc time: 3200183
    
    Size of variable: 8
    Fill time: 0
    Calc time: 3890223
    

    Results were reproducable.

    It seems on windows allocation is instant, perhaps because linux does not actually give you memory until you use it while windows just hands it all over to you at once, requiring less system calls. Or perhaps the assignment is optimized away.

    The multiplication of doubles is 21,5% slower here than for floats. This difference with the previous test is likely due to the different processor (that's my best guess at least).

    0 讨论(0)
  • 2020-12-29 21:40

    In speed terms, there's no difference between float and double on the more modern hardware.

    Very cheap devices seem to have a limited FPU where float is faster than double. I tested on a CMX device that is currently marketed as one of the the cheapest tablets in the world:

    • "float" test code takes 4.7 seconds
    • same code with "double" takes 6.6 seconds

    This question has been asked a couple of times ...

    Yes. Because the answer differs for different types of hardware. On desktop computers double has the same speed as float. On devices without FPU (interesting for WLAN router hacks) float is 2-5 times faster than double; and on devices with 32-bit FPU (often found in industrial and automotive applications) even up to 100 times.

    Please check out this article ...

    The last section of the article says that you have to do time measurements on the hardware device you are going to use to be 100% sure.

    0 讨论(0)
提交回复
热议问题