【问题标题】:Why does a declared float calculate partially in integers?为什么声明的浮点数部分以整数计算?
【发布时间】:2019-12-15 15:01:24
【问题描述】:

球体的体积是 (4/3)(pi)(r^3) 而不是 (1)(pi)(r^3)

为什么它会以整数计算 (4/3)?我希望明确声明的浮点变量以浮点数而不是整数进行计算。

我试过了:

float v = float(4/3) * 3.14159 * pow(r, 3);

我双浮动,它仍然没有浮动。

    cout << "  Calculate volume of sphere\n";
cout << "  __________________________\n";
float r;
cout << "  enter radius: ";
cin >> r;
float v = (4 / 3) * 3.14159 * pow(r, 3);
cout << "  volume = " << v << "\n";
cout << 4 / 3;  //  4/3 equals one?  Are you kidding me?

我希望 4/3 等于 1.333,而不是 1。

【问题讨论】:

  • 4 / 3更改为4.0 / 3.0
  • 它是 C 或 C++ 表达式的基本属性;表达式的类型仅取决于表达式的操作数。不在任何外部背景下。 IMO 它使语言更容易理解。我喜欢知道 4/3 始终是 1 ,而不是 FOO(4/3) 可能会收到与 BAR(4/3) 不同的值。
  • 因为整数计算在转换为浮点数之前。
  • 使用最容易阅读的东西,直到它被证明太慢,但为了支持像 e 到 pi 的力量这样的噩梦,pow 可能是一个昂贵的功能。 pow(r, 3) 通常会比 r*r*r 贵得多。既然这个程序注定会受到用户交互的限制,那就无所谓了,但是当你写更多数学密集的程序时,要对pow保持怀疑
  • "为什么声明的浮点数部分以整数计算?"你的问题是mu。它没有。

标签: c++ types floating-point


【解决方案1】:

当您在除法中使用整数时,编译器知道它必须执行整数除法。

std::cout << 4 / 3;

也就是说4除以3等于1,剩下的可以通过4 % 3得到(也就是取模运算符)

如果要进行浮点除法,则至少有一个操作数必须是浮点类型。例如:

std::cout << 4.0 / 3;

或者:

std::cout << 4 / 3.0;

它们也可以都是浮点数。

通过这样做,您将产生 1.33333333333 的预期输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2021-05-14
    • 2018-03-22
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多