LINUX.ORG.RU

СХОЖУ УМА (или деление в С)


0

0

Здравствуйте, уважаемые лоровцы! Приключилась такая проблемка: наваял простенькую программку (для тестов),
вроде бы, все правильно, но она, зараза, не работает.
Отладка (gdb) выдает следующее:

переменная z сначала содержит случайное значение,
но после строчки z=1/x она ОБНУЛЯЕТСЯ!
В чем проблема, до сих пор понять не могу...
Может, где-нибудь моя ошибка, или забыл чего?..
Помогите, плиз, разобраться. Заранее спасибо.

$gcc --version
gcc (GCC) 4.3.2

$gcc -g main.c
$./a.out
5 - 0.000000
2 - 0.000000

$cat main.c
#include <stdio.h>

void div(int x)
{
	double z;
	if (x == 0) { return; }
	z = 1 / x;
	printf("%d - %f\n", x, z);
}

int main(int argc, char **argv)
{
	div(5);
	div(0);
	div(2);
	return 0;
}

А что тебя удивляет-то? 1/2 == 0, у кого хочешь спроси.

tailgunner ★★★★★
()

целочисленное деление ибо int x, в итоге 1/2 = 0.5 = 0 (отбросили дробную часть)
Если написать z = 1.0 / x , ты принудительно получишь float деление

anonymous
()
Ответ на: комментарий от anonymous

>целочисленное деление ибо int x, в итоге 1/2 = 0.5 = 0 (отбросили дробную часть)

>Если написать z = 1.0 / x , ты принудительно получишь float деление

Точно! Огромное спасибо! Что-то я протупил маленько.

Всем спасибо, тема закрыта =)

DiGital
() автор топика

Тихо-тихо, не надо сходить с ума, это осенние обострения.

balodja ★★★
()

В FAQ, сукины дети

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.