yes*_*aaj 12 c++ floating-point double int
我只是想知道在将场景转换为int后会发生什么,比如int(5666.1)?是否比父类的子类的static_cast更昂贵?由于int和double的表示形式从根本上不同,因此在此过程中会产生临时性并且也很昂贵.
Pot*_*ter 18
任何具有本机浮点的CPU都将具有将浮点数转换为整数数据的指令.该操作可能需要几个周期到多个周期.通常,FP和整数都有单独的CPU寄存器,因此您必须随后将整数移动到整数寄存器,然后才能使用它.这可能是另一种操作,可能很昂贵.请参阅处理器手册.
PowerPC特别不包括将FP寄存器中的整数移动到整数寄存器的指令.必须有一个从FP到内存的存储,并加载到整数.因此,您可以说创建了一个临时变量.
在没有硬件FP支持的情况下,必须解码该号码.IEEE FP格式是:
sign | exponent + bias | mantissa
要转换,你必须做类似的事情
// Single-precision format values:
int const mantissa_bits = 23; // 52 for double.
int const exponent_bits = 8; // 11 for double.
int const exponent_bias = 127; // 1023 for double.
std::int32_t ieee;
std::memcpy( & ieee, & float_value, sizeof (std::int32_t) );
std::int32_t mantissa = ieee & (1 << mantissa_bits)-1 | 1 << mantissa_bits;
int exponent = ( ieee >> mantissa_bits & (1 << exponent_bits)-1 )
             - ( exponent_bias + mantissa_bits );
if ( exponent <= -32 ) {
    mantissa = 0;
} else if ( exponent < 0 ) {
    mantissa >>= - exponent;
} else if ( exponent + mantissa_bits + 1 >= 32 ) {
    overflow();
} else {
    mantissa <<= exponent;
}
if ( ieee < 0 ) mantissa = - mantissa;
return mantissa;
即,一些解包指令和一个班次.
| 归档时间: | 
 | 
| 查看次数: | 2660 次 | 
| 最近记录: |