可能重复:
实数 - 如何确定是否需要浮点数或双精度数?
我正在尝试检查从double到float的转换是否会导致精度损失.显然,我可以进行转换并将float转换回double并将其与原始值进行比较.我很好奇是否有更直接的方式.
是否mov 0x10(%esp),%esi需要更多时间才能完成mov (%ebx),%esi现代CPU?
我要做的是避免以下情况:
if(*ptr > 128) {
number = 5;
}
Run Code Online (Sandbox Code Playgroud)
当没有关于分支将走哪条路的明确模式时,这样的代码表现不佳.我想出的是:
int arr[] = { number, 5 };
int cond = *ptr > 128;
number = arr[cond];
Run Code Online (Sandbox Code Playgroud)
根据我的测试,当输入是随机的时,它的运行速度是条件的两倍.我想知道的是,是否有更聪明的方法来做到这一点,也许使用按位运算符.
说我有这个:
#define CAKE , something
Run Code Online (Sandbox Code Playgroud)
我想要的结果是", something". 可以做到吗?
以下在 gcc 中不起作用:
#define MAKE_STRING(x) #x
#define STRING(x) MAKE_STRING(x)
STRING(CAKE)
Run Code Online (Sandbox Code Playgroud)
编译器认为我将两个参数传递给 MAKE_STRING() 并阻止。
我正在尝试将我用PHP编写的东西移植到Python中,主要是为了更好地学习语言.有问题的代码是SWF解析器.在PHP中,我将所有数据结构声明为类.我试图在Python中做同样的事情,但似乎没有一种明确的方式来声明一个类变量.所以我最终得到了许多看起来像这样的类:
class SWFRGBA(object):
red = 0
green = 0
blue = 0
alpha = 0
Run Code Online (Sandbox Code Playgroud)
Pythoners真的写这样的东西吗?
[编辑]
让我发布一些实际代码来说明问题.下面的函数读取SWF文件中的矢量形状.readUB(),readSB()读取一定数量的位,解释它们无符号或有符号.有时,给定字段所需的位数本身是从比特流中读取的.可能会出现三种类型的记录:直边,二次曲线或样式更改.样式更改记录可能会移动笔位置,更改线型索引,更改两个填充样式索引之一或替换样式数组.
protected function readShapeRecords($numFillBits, $numLineBits, $version, &$bytesAvailable) {
$records = array();
while($bytesAvailable) {
if($this->readUB(1, $bytesAvailable)) {
// edge
if($this->readUB(1, $bytesAvailable)) {
// straight
$line = new SWFStraightEdge;
$line->numBits = $this->readUB(4, $bytesAvailable) + 2;
if($this->readUB(1, $bytesAvailable)) {
// general line
$line->deltaX = $this->readSB($line->numBits, $bytesAvailable);
$line->deltaY = $this->readSB($line->numBits, $bytesAvailable);
} else {
if($this->readUB(1, $bytesAvailable)) {
// vertical
$line->deltaX = 0;
$line->deltaY = $this->readSB($line->numBits, $bytesAvailable);
} …Run Code Online (Sandbox Code Playgroud)