Tag: 浮点

printf输出错误的数字

int main() { double i=4; printf(“%d”,i); return 0; } 谁能告诉我为什么这个程序输出0?

转换为int时浮点数为何在C下面舍入?

在一次采访中,有人问我对以下代码有何看法: #include int main() { float f = 10.7; int a; a = f; printf (“%d\n”, a); } 我回答了: 当您将float更改为没有float转换的int ,编译器将发出警告。 由于您没有使用强制转换,因此int将具有垃圾值。 然后,他们允许我在在线编译器上运行程序。 我不堪重负。 我的假设都是错误的。 编译器没有发出任何警告,并且int的值为10.即使我改变了, float值为10.9或10.3,答案也是一样的。 即使投了一个cast并没有改变结果。 有人能告诉我为什么会发生这种情况,结果会在什么情况下有所不同。 注意:在编译时,面试官告诉我不添加gcc标志。 编辑:现在我已经明白,浮动不会四舍五入,答案将是10.但有人可以解释我为什么这样设计? 转换为int时为什么浮动,在下面四舍五入? 有具体原因吗?

FLT_EPSILON用于具有SSE / AVX的第n个根查找器

我正在尝试转换一个函数,在C中找到第n个根,从以下链接http://rosettacode.org/wiki/Nth_root#C获取一个double值,使用AVX一次找到8个浮点数的第n个根。 部分代码使用DBL_EPSILON * 10.但是,当我将其转换为使用浮点数和AVX时,我必须使用FLT_EPSILON * 1000或代码挂起并且不会收敛。 当我打印出FLT_EPSILON时,我看到它是订单1E-7。 但是这个链接http://www.cplusplus.com/reference/cfloat/表示它应该是1E-5。 当我打印出DBL_EPSILON时它是1E-16但链接说它应该只是1E-9。 这是怎么回事? 这是迄今为止的代码(未完全优化)。 #include #include #include // AVX inline double abs_(double x) { return x >= 0 ? x : -x; } double pow_(double x, int e) { double ret = 1; for (ret = 1; e; x *= x, e >>= 1) { if ((e & […]

C浮点和双重比较

我在比较C中的简单浮点数和双精度数,特别是两者的值8.7。 现在我为每个变量分配8.7,当我打印时,我得到两个值的8.7000的结果。 为什么编译器添加了这些零。 我想问的主要问题是还有任何我没有看到的数字,如隐藏在尾随零之后的数字。 我读到由于缺乏精确度,我不应该使用float进行这样的比较,但是我认为它具有如此小的值,它确实可以存储8.7,并且需要一定程度的精确度来与另一个8.7值进行比较? 我唯一担心的是它实际上是在内存中的某个位置表示为例如8.70000003758或其他东西,这会让我的比较失败? 我试图使用%.20f打印f以查看可能隐藏的任何其他数字,但我认为只是创建了数字,否则不存在,因为数字的整体精确度变为8.6918734634834929或类似的东西。

Float和Double值在c 中造成混淆

我正在运行这个程序。 但得到奇怪的结果。 int main() { float a=.8; if(a < .8) printf("a is small\n"); else printf("a is not small\n"); float b=.7; if(b < .7) printf("b is small\n"); else printf("b is not small\n"); return 0; } 它给了我输出 – 一个不小 b很小

数字622.08E6 C中的解释

我最近发现了一个C代码(顺便说一句) freq_xtal = ((622.08E6 * vcxo_reg_val->hiv * vcxo_reg_val->n1)/(temp_rfreq)); 从我的直觉来看,似乎622.08E6应该意味着622.08 x 10^6这个假设是否正确? 我尝试使用谷歌搜索一个类似的例子,其中E符号在C程序中使用。令人惊讶的是找不到任何结果

将长浮点值剪切为2个小数点并复制到字符数组

我需要将Long a Float Value转换为Character Array,我需要这样做,因为Device API只接受这样的调用 我有这样的东西200.56866我需要一个像200.56的值。 我试过了 char buf1[sizeof(int)*3+2]=””; snprintf(buf1, sizeof buf1, “%f”, balance1); 但转换会产生一些随机值。我怎么能正确地做到这一点? 编辑:这个问题与单独截断十进制值无关。它主要涉及将float复制到char数组的问题。

程序返回inf?

我认为错误在于这一行: float bmi = weight * 703 / pow(height, 2.0); // user inputs weight and height and the bmi should be calculated. 问题是,我创建了一个模拟程序,其中已经放入了值,一切都很好。 但是,当我使用scanf()让用户输入相同的值时,它不起作用。 #include #include int main () { float weight = 105, height = 63; float bmi; bmi = weight * 703 / pow(height, 2.0); printf(“%f\n”, bmi); } 重量和高度都是浮子。 当我尝试打印bmi时,我得到“inf”。 **编辑显示输入function和打印声明。 printf(“Weight? “); […]

while循环不终止 – 浮点运算

我正在使用浮点值处理C程序,下面是我的代码。 #include #include #include int main() { int counter = 0; float quarter = 0.25; float dime = 0.10; float nickel = 0.05; float penny = 0.01; float change = 0.00; printf(“hi, how much do i owe u?\t”); scanf(“%f”, &change); while(change > 0.0) { if(change >= quarter) { change -= quarter; printf(“quarter %.2f\n”, quarter); } […]

在指数和小数部分之间转换具有不同位数的格式

我试图刷新浮点数。 我正在阅读一个练习,要求从格式A转换为:k = 3,4比特分数和偏差= 3到格式B,其中k = 4,3比特分数和偏差7。 我们应该在必要时进行圆 格式之间的示例: 011 0000 (Value = 1) =====> 0111 000 (Value = 1) 010 1001 (Value = 25/32) =====> 0110 100 (Value = 3/4 Rounded down) 110 1111 (Value = 31/2) =====> 1011 000 (Value = 16 Rounded up) 问题:我无法弄清楚转换的工作原理。 首先,我设法在某些情况下正确地做到了,但我的方法是将格式A的位模式转换为十进制值,然后以格式B的位模式表示该值。 但有没有办法以某种方式从一位模式转到另一种模式而不进行此转换,只知道我们将e扩展1位并将分数减少1?