Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2012, 22:23   #1
Faton 11
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 74
По умолчанию вывести на экран значение типа float

Добрый вечер! Пытаюсь вывести на экран значение float, а оно оказывается равным нулю, хотя если посчитать "руками", должно получиться 0.071872
Как это можно исправить?

Код:
#include <stdafx.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <string>
#include <sstream>
#include <cmath>

using namespace std;

const int N=800;

int main ()
{ 
float v1=(N*(N-3)/(N+1));
float v2=powf(v1,0.5);
float r2=1/(N-1)+2/(N-1)*v2;
printf ("r2 = [%f]\n",r2); //r2=0.071872178;

system ("pause");
}

Последний раз редактировалось Faton 11; 27.11.2012 в 22:26.
Faton 11 вне форума Ответить с цитированием
Старый 27.11.2012, 23:14   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Код:
1/(N-1)
Вычисляется как целочисленное деление, которое дает 0. Напишите, например, так:
Код:
1.0/(N-1)
или явно сделайте приведение типов в нужных местах.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 27.11.2012, 23:32   #3
Faton 11
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 74
По умолчанию

Спасибо =) А если, например, в знаменателе функция типа float, то будет делиться? В С++ вообще не существует "нормальное" деление?
Faton 11 вне форума Ответить с цитированием
Старый 28.11.2012, 01:21   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Если оба аргумента операции - int, то производятся целочисленные операции (например, 8 / 3 = 2). Если хотя бы один - float (или double), то всё приводится к float (или к double) и выполняются операции с плавающей точкой.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 28.11.2012, 12:27   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
В С++ вообще не существует "нормальное" деление?
А чем целочисленное деление "ненормально"?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести на экран значение элемента MenuStrip? IgorDaiko C# (си шарп) 3 03.07.2012 00:35
Возможно ли в массив типа char записать первым элементом значение переменной типа float? Green Gin Общие вопросы C/C++ 2 05.12.2011 01:50
Ошибка типа cannot convert `float*' to `float' for argument `1' ... Trackman Помощь студентам 3 23.05.2011 17:09
Как вывести значение регистра данных на экран??? ~VL@D~ Помощь студентам 0 30.03.2011 14:16
Как вывести значение на экраН?? ~VL@D~ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 07.02.2011 12:37