gpt4 book ai didi

c - BCD算术运算

转载 作者:太空宇宙 更新时间:2023-11-04 04:52:08 25 4
gpt4 key购买 nike

我写了一个将double转换为BCD的函数(BCD:将double的每一位保存为unsigned char,此外还保存完整长度,小数长度( float 后面的部分)和符号双数)。我使用以下结构

struct bcd_number 
{
unsigned int length;
unsigned int fractional;
signed char sign;
unsigned char *digits;
};

这就是 BCD 函数的 double :

    struct bcd_number* double2bcd(double x) 
{
char tmp[512];
struct bcd_number* bcd = malloc (sizeof(struct bcd_number));

int a = x;
double before = a;
double fractional;
fractional = x-(long)x;


bcd->digits = malloc (512);

char* z = (char*) bcd->digits;


sprintf (tmp,"%g",fabs(before));

bcd->length = strlen(tmp);
bcd->sign = (before < 0) ? '-' : '+';

for (size_t i=0; i<bcd->length; ++i)
{ *z++ = tmp[i] - '0'; }

sprintf (tmp,"%g",fabs(fractional));

for (size_t i = strlen(tmp)-1; i!=0; --i)
if (tmp[i] != '0')
{ tmp[i+1] = 0; break; }


bcd->fractional = strlen(tmp+2);
bcd->length += bcd->fractional;


for (char* t = tmp + 2; *t; *z++ = *t++ - '0');
bcd->digits = realloc (bcd->digits, bcd->length);



return bcd;
}

这很完美。

我还添加了执行加法/减法的功能(完整源代码:http://pastebin.com/HR70VukM)但现在我想执行乘法和除法。但问题是只有字符作为数字(我不想改变它)。我现在必须像“纸上的乘法”(没有计算器的经典方法)但我认为它必须像模运算符的加法。另一方面,我不知道如何用带模的字符来实现它。有什么想法或提示吗?

最佳答案

乘法和除法之后是什么?阶乘?模数?指数?自然对数?正弦?余弦?将 BCD 变回 double ,进行任何数学运算,将结果转换为 BCD

关于c - BCD算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14122715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com