当前位置:  开发笔记 > 编程语言 > 正文

现场后面的双转换为int?

如何解决《现场后面的双转换为int?》经验,为你挑选了1个好方法。

我只是想知道在将场景转换为int后会发生什么,比如int(5666.1)?是否比父类的子类的static_cast更昂贵?由于int和double的表示形式从根本上不同,因此在此过程中会产生临时性并且也很昂贵.



1> Potatoswatte..:

任何具有本机浮点的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;

即,一些解包指令和一个班次.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有