C

共 58 篇文章。

Python的浮点数 __str__ 方法的小问题

• Development

今天 康神 发现一个浮点数的问题,一个 class 里面有两个浮点(double) 成员 x、y,然后用 return (self.x, self.y).__str__() 返回时,发现输出是 (39.210279999999997, 116.34528) 而不是希望的 (116.345280, 39.210280)。

查了一下,改成 return “(%f, %f)” % (self.x, self.y) 解决。C里面printf的 %f 默认显示小数点后面6位,但是 __str__ 似乎自己对于浮点数精度有些想法?没看 Python 具体的实现。

参与评论

搞坏了inet_ntoa_r API

• Kernel

看来还是学的太少了。之前只是注意到内核有提供这样一个接口,等到kris来信才知道,这个接口和其他平台上都不一样-_-#

参与评论

关于DECONST

• Development

#define DE_CONST(konst, var) do { union { const void *k; void *v; } _u; _u.k = konst; var = _u.v; } while (0)

#define __UNCONST(a) ((void *)(unsigned long)(const void *)(a))

颚的神啊……

参与评论

龌龊的dirname(3)定义

• Development

在POSIX中提到,这个API不仅可以修改输入参数,而且可以返回一个静态存储的指针,说白了,你不能指望某个平台上它是线程安全的,也不能指望它不会修改你发给它的数据……

参与评论

调试进行时

• Development

昨天深夜被李逵同学的电话叫醒,被告知新上线的一个Python应用发生了一个回归问题——一个使用了C模块的程序经常自己退出。

由于这个C模块已经几年没有改过了,加上没有coredump文件,因此调试起来非常困难。另一方面,我们的代码也是一行没改,因此很难确定到底是什么出了问题。李逵坚持认为这个问题是由于Python的编译配置不当引起的。天地良心……编译配置就是之前的配置,不过我还是想办法重编了一套,后来听这家伙说,他没有选pymalloc。

阅读全文… ( 本文约 449 字,阅读大致需要 1 分钟 )

如何计算不小于给定数的最小的2整数次方幂?

• Development

dengxf同学提到的一个问题,想了一下,想到的一个算法:

令xx为已知量,yy为目标量,kk为迭代轮数,

  1. 令 y=x−1y=x-1,k=0k=0
  2. 对于 yy 右移 2k2^k 位 >0> 0的情形,执行下列操作,直到此条件不符合为止:
    y与前述结果相与;kk累进11。
  3. yy累进11。

原理:第(2)步的循环将除最高位的所有0均置位。最后一步(3)修正这一值。

阅读全文… ( 本文约 199 字,阅读大致需要 1 分钟 )

函数指针

• Development

今天在改rtld-elf的时候发现,它定义了一个函数指针数组,其内容是参数不定的,于是定义为:

typedef void (*func_ptr)();

然而,在较高的警告级别下,这一写法会被gcc认为不是prototype。

阅读全文… ( 本文约 158 字,阅读大致需要 1 分钟 )