Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Покажите что тут нетак и чтоо выводить должно по вашему? (https://forum.antichat.xyz/showthread.php?t=77367)

NorB 16.07.2008 17:03

Покажите что тут нетак и чтоо выводить должно по вашему?
 
Код:

float x,y,rezult;   
 for(int j=1; j<500000; j++){             
y =(float)j;     
for(int i=1; i<500000; i++){             
x=(float)i;             
rezult = x - (x/y)*y;           
 if (rezult != 0){cout<<rezult;};                   
    };             
 };

Что должен этот код выводить?=\
и что выводить должен этот :

Код:

float x,y,rezult;   
 for(int j=1; j<500000; j++){             
y =(float)j;   
 for(int i=1; i<500000; i++){ 
x=(float)i;
rezult = x - (x/y)*y;           
cout<<rezult;                 
 };             
};

И правильноли там преобразование сдделал ато все забыл за лето уже : y =(float)j?
В обшем должно же ноль всегда ввыводить только?)

nc.STRIEM 16.07.2008 17:47

>>>В обшем должно же ноль всегда ввыводить только?)
нет. ты соскобками разберись

так наглядней
Код:

float x,y,rezult;   
 for(int j=1; j<500000; j++)
 {             
        y =j;     
        for(int i=1; i<500000; i++)
        {             
                x=i;             
                rezult = x - (x/y)*y;           
                if (rezult != 0)
                        cout<<rezult;                   
    }             
 }

а выводит он много цифр.
p/s/ преобразование типов в данном случае не надо т.к. переменные и так флоат. Точказапятая после фигурных скобок не обязательна, и есле один оператор то фигурные скобки тож не обязательны

izlesa 16.07.2008 22:02

ога, много много "типо" нулей, код то правильный (за исключением точек с запятой невпопад) ... размерность float имеет свою конечную размерность и при делении непопавшии в неё разряды после запятой обрезаются, что даёт некоторую флуктуацию
так что несовсем (x/y)*y = x
както так

VAran 16.07.2008 23:34

Цитата:

if (rezult != 0)
выводиться как раз будут НЕ нули.
и выводиться все эти цифры будут "сплошняком".
добавь что-ли разделитель какой-нибудь для наглядности.

izlesa 16.07.2008 23:49

2VAran
"ТИПО" нули
код скомпилируй сначала и вывод сделай такой чтобы поле дробной части было символов в 20

printf("%.20f", rezult);

и сразу видно будет, что это числа порядка 1 * 10^(-15) ... а всё изза конечной размерности типа float
поэтому x - (x/y)*y иногда и != 0

krypt3r 17.07.2008 10:07

Код:

rezult = x - (x/y)*y;
Математически в этом выражении будет присваиваться нуль, но из-за особенностей реализации чисел с плавающей точкой в компьютерах нуль там никогда не будет. Число 26.57, к примеру, будет представлено чем-то наподобие 26.5699999999999

nc.STRIEM 17.07.2008 10:47

Цитата:

Сообщение от krypt3r
Код:

rezult = x - (x/y)*y;
Математически в этом выражении будет присваиваться нуль, но из-за особенностей реализации чисел с плавающей точкой в компьютерах нуль там никогда не будет. Число 26.57, к примеру, будет представлено чем-то наподобие 26.5699999999999

че за бред ты отписал?
Тут ноль не будет присваиваться! посмотри код и поймеш что x != y поэтому нуля та мне будет

izlesa 17.07.2008 10:53

2nc.STRIEM
сокращать дроби не умеем?
(x/y)*y = x
или ты просто скобки не заметил? ^______^

krypt3r 17.07.2008 11:25

nc.STRIEM, ты посты внимательно читаешь или как? Я сказал - МАТЕМАТИЧЕСКИ. Возьми бумажку и ручку, напиши эту формулу, подставь вместо x и y любые числа. Если у тебя остались хоть элементарные познания арифметики, на бумаге у тебя будет нуль. Сам бред несешь. Учи математику.

izlesa 17.07.2008 12:07

2Exile1985
ненадо ТС путать
если не знаешь, так хотя бы скомпиль код и посмотри, что получится
а чтобы осмыслить то, что получилось прочти то что здесь постили я и krypt3r

ЗЫ читайте, прежде чем ответить, всю тему! и подумайте прежде чем отвечать, а то человека же путаете млин


Время: 23:41