我在c实现定点设备。 您要定义" not-a-number "以支持函数boolisnan(… (. )。 如果数字不是-a,则返回true;否则返回false。
有人可以如何定义我“不是数字”的想法,实现我定点数学的函数boolisnan(…)。
我已经读过C Nan,但是没有得到关于如何手动定义和创建函数nan ()以在定点实现中使用它的来源和参考。
你能提供继续方法和一些参考告诉我如何继续吗?
更新固定点标头
# ifndef _ _ fixed _ point _ header _ h _ _
# define _ _ fixed _ point _ header _ h _ _
#包含
#包含
#endif
namespace fp {
template
class fixed _ point : boost :3360 ordered _ field _ operators : fixed _ pointif
{
//computethepowerof2atcompiletimebytemplaterecursion
template
结构电源2
{
static const long long value=2第二条大裙子power2:value;
(;
template
struct power20,p
{
static const long long value=1;
(;
fixed_point(FPvalue,bool ) : fixed _ (value ) { } //initializer list
公共:
typedef FP base_type; //fixedpointbasetypeofthisfixed _ pointclass。
staticconstunsignedcharinteger _ bit _ count=I; ///integer部件位计数。
staticconstunsignedcharfractional _ bit _ count=f; ///fractional part bit count。
fixed _ point (}//default constructor。
//Integer to Fixed point
templatefixed_point(tvalue ) :fixed_ () ) FP ) value F ) )。
{
boost _ concept _ assert ((boost :3360 integer ) );
}
//floating point to fixed point
fixed_point(floatvalue ) :fixed_ ) ) ) FP ) )第value条大裙子power2:value ) ) }
fixed_point(doublevalue ) :fixed_ ) ) ) FP ) ) value大裙子power2:value ) }{}
fixed_point(longdoublevalue ) :fixed_ ) ) ) FP ) ) value大裙子power2:value ) }{}
///Copy constructor,explicit definition
fixed _ point (fixed _ pointconstrhs ) : fixed _ (RHS.fixed _ ) )。
{}
//copy-and-swap idiom。
FP : fixed _ point operator=(FP :3360 fixed _ pointconstrhs )
{
FP : fixed _ point temp (RHS; //First,make a copy of the right-hand side
swap(temp ); //swappingthecopied(old ) data the new data。
return大眼裙子this; //return by reference
}
//exchangestheelementsoftwofixed _ point objects。
void swap (FP :3360 fixed _ point RHS ) )。
{
STD:3360swap(fixed_,rhs.fixed_ );
}
布尔操作器
///Right hand side。
FP : fixed _ pointconstrhs ) const
{
return fixed_ rhs.fixed_; //return by value
}
bool operator==(
///Right hand side。
FP : fixed _ pointconstrhs ) const
{
return fixed_==rhs.fixed_; //return by value
}
//身份验证。
FP : fixed _ point operator=(FP :3360 fixed _ pointconstsummation )
{
fixed_ =summation.fixed_;
return大眼裙子this; //! /return A reference to this object。
}
///Subtraction。
FP : fixed _ point operator-=(FP :3360 fixed _ pointconstsubtraction () ) ) ) )。
{
fixed_ -=subtraction.fixed_;
return大眼裙子this; //return A reference to this object。
}
//多播放。
FP : fixed _ point operator大眼裙=(FP : fixed _ pointconstfactor ) ) ) ) ) )。
{
Fixed_=(Fixed_眼睛的大裙子(factor.fixed_ F ) ) ) ) ) ) ) ) ) )。
() fixed_大眼裙子(factor.fixed _ (power 2:3360 value-1 ) ) ) f );
return大眼裙子this; //return A reference to this object。
}
///Division
FP : fixed _ point operator/=(FP : fixed _ pointconstdivisor () ) ) ) ) ) ) )。
{
fp:fixed_point fp_z=1;
FP_z.fixed_=() FP_z.fixed_ ) (F-2 ) )divisor.fixed_ ) )2);
大眼裙this大眼裙=fp_z;
return大眼裙子this; //return A reference to this object
}
私有:
///The value in fixed point format。
(;
} //namespace fmpl
#endif
#endif //__fixed_point_header__