Нахождение геометрического среднего пользовательского ввода - PullRequest
0 голосов
/ 02 сентября 2011

Я работаю над проектом для класса, и у меня возникают проблемы с выводом среднего геометрического, который всегда равен 1, и я уверен, что это неправильно.

Вотмой код:

#include<iostream>

#include<math.h>

using namespace std;

int main(int argc, char**argv) 
{
float i, j, k;
float a, h, g;

cout<<"Enter 3 floating point numbers"<<endl;
cin>>i>>j>>k;

while(i>0 && j>0 && k>0 )
{
    a = (i+j+k)/3;
    h = 3/((1/i) + (1/j) + (1/k));


    g = pow((i*j*k),(1/3));

    cout<<"Arithmetic: "<<a<<endl;
    cout<<"Harmonic: "<<h<<endl;
    cout<<"Geometric: "<<g<<endl;

    cout<<"Enter 3 floating point numbers"<<endl;
    cin>>i>>j>>k;
}


return(0);
}

Ответы [ 3 ]

4 голосов
/ 02 сентября 2011

1/3 - ноль, потому что это целочисленное деление. Это всегда целочисленное деление, если оба операнда имеют целочисленные типы. Тогда вы делаете мощность чего-либо равной нулю и получаете единицу.

Вам нужно использовать литералы с плавающей точкой: 1.0/3.0 будет иметь тип double, а 1.0f/3.0f будет иметь тип float.

2 голосов
/ 02 сентября 2011

1/3 - это целое число, равное 0. Вы должны написать 1.0/3.0 (или 1./3), чтобы получить значение с плавающей запятой.

1 голос
/ 02 сентября 2011
(1/3)

Это интегральное деление, которое всегда выдает 0, так как остаток определяется как усеченный.Вам нужно привести один или оба к значению с плавающей точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...