Tag: 浮点

为什么这段简单的代码不起作用?

我试图将浮动变量精确到3个小数点进行比较计算。 我正在尝试下面的方法,但它不起作用。 我不知道为什么不,所以请有人告诉我哪里出错了。 此代码的输出为b = 10000.050617, bb = 10000050 and fbb = 10000.000 。 我希望fbb为10000.050。 int bb; double m,n,p,q,b,t,u,fbb; m=24.161, n=57.695, p=67.092, q=148.011; t=pm; u=qn; b=t*t+u*u; bb=b*1000; fbb=bb/1000; printf(“b=%.6lf,bb=%i,fbb=%.3lf\n”,b,bb,fbb); return 0;

C中精度浮点运算的问题

对于我的课程项目之一,我开始在C中实现“朴素贝叶斯分类器”。我的项目是使用大量训练数据实现文档分类器应用程序(尤其是垃圾邮件)。 现在由于C数据类型的限制,我在实现算法时遇到了问题。 (我在这里使用的算法, http://en.wikipedia.org/wiki/Bayesian_spam_filtering ) 问题陈述:该算法涉及获取文档中的每个单词并计算它是垃圾邮件单词的概率。 如果p1,p2 p3 …. pn是word-1,2,3 … n的概率。 使用以下方法计算doc是否为垃圾邮件的概率 这里,概率值可以非常容易地在0.01左右。 因此,即使我使用数据类型“double”,我的计算也会进行折腾。 为了证实这一点,我写了一个给出的示例代码。 #define PROBABILITY_OF_UNLIKELY_SPAM_WORD (0.01) #define PROBABILITY_OF_MOSTLY_SPAM_WORD (0.99) int main() { int index; long double numerator = 1.0; long double denom1 = 1.0, denom2 = 1.0; long double doc_spam_prob; /* Simulating FEW unlikely spam words */ for(index = 0; index < […]

如何翻转双精度的指数(例如1e300-> 1e-300)?

我有兴趣编写一个快速的C程序来翻转double的指数。 例如,该程序应将1e300转换为1e-300。 我想最好的方法是一些操作,但我缺乏足够的知识来实现​​这一点。 有什么好主意吗?

如何在C中读取和存储货币值

我想知道在C中读取和存储货币值的最佳方法是什么,例如11.22。 我尝试scan(“%f”, &num) ,但我在浮动结束时得到随机值。 有没有办法只读到小数点后第二位? 如果我添加这些数字,它们就不准确; 由于某种原因它倒圆了。 添加11.22 + 22.33优于11.220000 + 22.330000,因为我得到了随机值; 我不知道为什么! 如果超出小数点后第二位并且用户输入了一个字符,是否有办法将错误返回给用户。 我在考虑将(数组)字符串转换为浮点数。

int和float的大小

我有关于整数和浮点范围的问题: 如果它们都具有相同的4字节大小,为什么它们具有不同的范围?

C程序没有正确添加浮点数

我有一个看起来像这样的方法: float * mutate(float* organism){ int i; float sign = 1; static float newOrg[INPUTS] = {0}; for (i = 0;i<INPUTS;i++){ if (rand() % 2 == 0) { sign = 1; } else { sign = -1; } float temp = (organism[i] + sign); printf("bf: %f af: %f diff: %f sign: %f sign2: %f temp: %f\n\n", […]

Scanf没有读取双倍

我试图使用scanf连续读取用户的double值。 码: printf(“Enter A value: \n”); double input; int result = scanf(“%f”, &input); printf(“INPUT: %f\n”, input); 输出是 INPUT: 0.000

在C中获取float类型变量的整数表示值

我将数字20(0x14)存储在32位寄存器中。 寄存器分配给表示值2.8e-44的C float变量。 现在我想得到float变量的hex表示并将其存储到整数变量中,以恢复信息的原始含义。 除了做一些指针业务之外,还有更好的方法吗? 这是代码: #include int main() { float f = 2.802597e-44; int nv,*pnv; printf(“f=%f\n”,f); printf(“n=%d\n”,f); nv=(int)f; printf(“n=%d\n”,nv); pnv=(int*)&f; printf(“n=%d\n”,(*pnv)); return 0; } 我使用pnv整数指针得到我想要的东西。 有没有更好的方法来避免指针和在C中工作?

我的简短C代码中的小错误。 为什么?

我无法弄清楚为什么这对90%的输入起作用,而不是其他输入。 这是为了告诉你在变化中会得到多少硬币。 大多数测试数量都可以正常工作,但是如果输入4.20(或4.20美元),它将返回23个硬币……它应该是18个硬币(16个季度和2个镍币)。 这个bug在哪里? 这是我的代码: #include #include int main(void){ float change = 0.00; printf(“How much change is owed? “); change = GetFloat(); float quarters = change/.25; change-= (int)quarters*.25; float dimes = change/.10; change-= (int)dimes*.10; float nickels = change/.05; change-= (int)nickels*.05; float pennies = (change+.005)/.01; change-=(int)pennies*.01; int total = (int)quarters+(int)dimes+(int)nickels+(int)pennies; printf(“%d\n”, total); return 0; }

浮点变量不符合条件(C)

我试图让用户输入介于1.00000到0.00001之间的数字,而边缘不包含在浮点变量中。 我可以假设用户在点后面没有输入超过5个数字。 现在,这是我写的: printf(“Enter required Leibniz gap.(Between 0.00001 to 1.00000)\n”); scanf(“%f”, &gap); while ((gap 0.99999)) { printf(“Enter required Leibniz gap.(Between 0.00001 to 1.00000)\n”); scanf(“%f”, &gap); } 现在,当我输入尽可能小的数字时:0.00002陷入了while循环。 当我运行调试器时,我看到0.00002与float变量中的值一起存储:1.99999995e-005任何人都可以为我澄清我做错了什么? 为什么0.00002不满足条件? 什么是“1.99999995e-005”的事情。