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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by NorB, 16 Jul 2008.

  1. NorB

    NorB Elder - Старейшина

    Joined:
    20 Jul 2007
    Messages:
    109
    Likes Received:
    12
    Reputations:
    -2
    Code:
     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;};                    
        };              
     };
    Что должен этот код выводить?=\
    и что выводить должен этот :

    Code:
    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?
    В обшем должно же ноль всегда ввыводить только?)
     
  2. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    >>>В обшем должно же ноль всегда ввыводить только?)
    нет. ты соскобками разберись

    так наглядней
    Code:
     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/ преобразование типов в данном случае не надо т.к. переменные и так флоат. Точказапятая после фигурных скобок не обязательна, и есле один оператор то фигурные скобки тож не обязательны
     
    #2 nc.STRIEM, 16 Jul 2008
    Last edited: 16 Jul 2008
  3. izlesa

    izlesa Elder - Старейшина

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    ога, много много "типо" нулей, код то правильный (за исключением точек с запятой невпопад) ... размерность float имеет свою конечную размерность и при делении непопавшии в неё разряды после запятой обрезаются, что даёт некоторую флуктуацию
    так что несовсем (x/y)*y = x
    както так
     
  4. VAran

    VAran Elder - Старейшина

    Joined:
    29 May 2008
    Messages:
    51
    Likes Received:
    15
    Reputations:
    4
    выводиться как раз будут НЕ нули.
    и выводиться все эти цифры будут "сплошняком".
    добавь что-ли разделитель какой-нибудь для наглядности.
     
  5. izlesa

    izlesa Elder - Старейшина

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    2VAran
    "ТИПО" нули
    код скомпилируй сначала и вывод сделай такой чтобы поле дробной части было символов в 20

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

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

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    rezult = x - (x/y)*y;
    
    Математически в этом выражении будет присваиваться нуль, но из-за особенностей реализации чисел с плавающей точкой в компьютерах нуль там никогда не будет. Число 26.57, к примеру, будет представлено чем-то наподобие 26.5699999999999
     
    2 people like this.
  7. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    че за бред ты отписал?
    Тут ноль не будет присваиваться! посмотри код и поймеш что x != y поэтому нуля та мне будет
     
  8. izlesa

    izlesa Elder - Старейшина

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    2nc.STRIEM
    сокращать дроби не умеем?
    (x/y)*y = x
    или ты просто скобки не заметил? ^______^
     
  9. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    nc.STRIEM, ты посты внимательно читаешь или как? Я сказал - МАТЕМАТИЧЕСКИ. Возьми бумажку и ручку, напиши эту формулу, подставь вместо x и y любые числа. Если у тебя остались хоть элементарные познания арифметики, на бумаге у тебя будет нуль. Сам бред несешь. Учи математику.
     
  10. izlesa

    izlesa Elder - Старейшина

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    2Exile1985
    ненадо ТС путать
    если не знаешь, так хотя бы скомпиль код и посмотри, что получится
    а чтобы осмыслить то, что получилось прочти то что здесь постили я и krypt3r

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

    Exile1985 Elder - Старейшина

    Joined:
    10 Aug 2006
    Messages:
    124
    Likes Received:
    35
    Reputations:
    1
    спокойствие...только спокойствие
    зы.: а написал то как....ух xD
     
  12. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    шот я с математикой проебал немного....
     
  13. izlesa

    izlesa Elder - Старейшина

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    2Exile1985
    утро ... работа ... юзвери ... раздражение
    ^_________^
     
    1 person likes this.
  14. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    nc.STRIEM поразил =) без обид ...
     
  15. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    гы)) бывает... суровое утро