c中的浮点数学得到随机数

时间:2014-09-26 18:55:58

标签: c floating-point division

我正在使用C primer进行练习,其中涉及使用浮点数,我无法得到结果也是浮点数。我把它读入输入正常(据我所知)但问题必须在公式行中。谁能告诉我我做错了什么?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   float inp1, inp2;
   float result;

   result = (inp1 - inp2) / (inp1 * inp2); /* formula */

   printf("enter two values\n");
   scanf("%f %f", &inp1, &inp2);

   printf("(%.3f - %.3f) / (%.3f * %.3f)\n", inp1, inp2, inp1, inp2);
   printf("%f\n", result);
}

输出给出一些随机数(我不知道它叫什么),例如输入1.255和1.023我输出2656044210243861500000000000000000000.000000或类似的东西。倒数第二个printf正确显示输入。 我做错了什么?

我已经尝试过了,但我并没有真正理解投射操作员的工作方式。

result = ((float)inp1 - (float)inp2) / ((float)inp1 * (float)inp2); //formula

result = (float)(inp1 - inp2) / (inp1 * inp2);

3 个答案:

答案 0 :(得分:4)

result = (inp1 - inp2) / (inp1 * inp2); /* formula */

printf("enter two values\n");
scanf("%f %f", &inp1, &inp2);

那么,在scanf赋值语句之前调用result = ...;呢?

答案 1 :(得分:1)

result = (inp1 - inp2) / (inp1 * inp2); /* formula */

printf("enter two values\n");
scanf("%f %f", &inp1, &inp2);

这不是像C这样的语言有用的方式;您没有为result定义公式,当您阅读输入时,它会自动计算出来。相反,您首先阅读输入,然后计算值并分配给result

printf("enter two values\n");
scanf("%f %f", &inp1, &inp2);

result = (inp1 - inp2) / (inp1 * inp2); /* computation and assignment */

C是一种命令式语言,这意味着您必须明确列出其要遵循的指令,包括任何数学计算的指令。

答案 2 :(得分:1)

编程语言中数学公式的类比是函数(没有副作用)。这样,您可以在代码本身之前定义公式。例如:

#include <stdio.h>
#include <stdlib.h>

float formula(float inp1, float inp2)
{
  return (inp1 - inp2) / (inp1 * inp2);
}

int main(void)
{
   float inp1, inp2;

   printf("enter two values\n");
   scanf("%f %f", &inp1, &inp2);

   printf("(%.3f - %.3f) / (%.3f * %.3f)\n", inp1, inp2, inp1, inp2);
   printf("%f\n", formula(inp1, inp2));
   return 0;
}