Converting floating point to fixed point

后端 未结 6 1842
耶瑟儿~
耶瑟儿~ 2020-12-23 12:13

In C++, what\'s the generic way to convert any floating point value (float) to fixed point (int, 16:16 or 24:8)?

EDIT: For clarification, fixed-poin

6条回答
  •  自闭症患者
    2020-12-23 13:11

    Here you go:

    // A signed fixed-point 16:16 class
    class FixedPoint_16_16
    {
        short          intPart;
        unsigned short fracPart;
    
    public:
        FixedPoint_16_16(double d)
        {
            *this = d; // calls operator=
        }
    
        FixedPoint_16_16& operator=(double d)
        {
            intPart = static_cast(d);
            fracPart = static_cast
                        (numeric_limits + 1.0)*d);
            return *this;
        }
    
        // Other operators can be defined here
    };
    

    EDIT: Here's a more general class based on anothercommon way to deal with fixed-point numbers (and which KPexEA pointed out):

    template 
    class fixed_point
    {
        const static BaseType factor = 1 << FracDigits;
    
        BaseType data;
    
    public:
        fixed_point(double d)
        {
            *this = d; // calls operator=
        }
    
        fixed_point& operator=(double d)
        {
            data = static_cast(d*factor);
            return *this;
        }
    
        BaseType raw_data() const
        {
            return data;
        }
    
        // Other operators can be defined here
    };
    
    
    fixed_point fp1;           // Will be signed 24:8 (if int is 32-bits)
    fixed_point fp1; // Will be unsigned 16:16 (if int is 32-bits)
    

提交回复
热议问题