快速计算绝对值
CSDN首席喷子
2025年01月31日 10:52

二进制数字的绝对值全看最高位,如果是1说明是负数,整数取反码加一,浮点数直接将最高位设为0。可以看到,浮点数根本就不精确,比较大小的时候只能用相减取绝对值门限的办法,而不是用等号。

代码块
clike
自动换行
复制代码
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

union double_union {
	double num;
	unsigned char bytes[8];
};
typedef union double_union double_union;

int main() {
	double_union x[4];
	int i;
	int m, n;
	
	x[0].num = -0.245942;
	x[1].num = -14.4495;
	x[2].num = -913247882219.6644758912347;
	x[3].num = -999501489501.142;
	
	for(i = 0; i < 4; i++) {
		x[i].bytes[7] &= 0x7f;
	}
	
	for(i = 0; i < 4; i++) {
		printf("%10.4f\n", x[i]);
	}
	
	m = -425;
	n = -949991347;
	
	if(m & 0x7f000000) {
		m = (~m) + 1;
	}
	if(n & 0x7f000000) {
		n = (~n) + 1;
	}
	printf("M:%d, N:%d\n", m, n);
	
	return(0);
}
复制成功