Неопознанный математический знак в с++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by 7ion, 28 Apr 2007.

  1. 7ion

    7ion Banned

    Joined:
    29 Oct 2006
    Messages:
    68
    Likes Received:
    26
    Reputations:
    2
    Пишу прогу по информатике на с++. есть такая функция:
    Code:
     void oval2(double xf, double yf) 
    {  
    
    while(yf <= 0) { 
                         // simply bruteforce...
    
         forma= sqrt((xf-13)/a) + sqrt((yf-2)/b);
         
          yf++;
          if (forma>=1) //if point is right then add this in the table
          {
                        yf=3;
        x[4]=xf;
        y[4]=yf;
        break;
    }
              
    }
    вызывается она так:
    Code:
    oval2(0,-40);
    И вот в чем прикол y[4] всегда равен нулю, вне зависимости от того больше forma единицы или меньше или равна. разве такое реально?
    зы: все переменные в double.
     
    #1 7ion, 28 Apr 2007
    Last edited: 28 Apr 2007
  2. gibson

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

    Joined:
    24 Feb 2006
    Messages:
    391
    Likes Received:
    247
    Reputations:
    88
    у тебя начальное значение yf скока? если описано как int yf=0 то цикл не будет выполняться while(yf <= 0) потому что yf++; и сразу идет на break может я ошибаюсь))
     
  3. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    дабл это не инт и почти никогда не равен целому числу после каких либо сложных операций. т.е. опреация dbl_Y == 0 не вернет тру если dbl_Y равен скажем 0.0001326, аппроксимируй до 0.00 0.000 0.0000 и тд, сморя какая точность нужна
     
  4. sni4ok

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

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    а чему равны значения a и b?
     
    1 person likes this.
  5. 7ion

    7ion Banned

    Joined:
    29 Oct 2006
    Messages:
    68
    Likes Received:
    26
    Reputations:
    2
    yf = -40 это видно из вызова функции. a=23, b=38. я в си новичек, поэтому мог допустить ошибку.
    2sn0w: а причем здесь int? тем более что я сравнивниваю больше-меньше.
     
    #5 7ion, 28 Apr 2007
    Last edited: 28 Apr 2007
  6. sni4ok

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

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    ты sqrt пытаешься из отрицательного числа брать :D
     
  7. 7ion

    7ion Banned

    Joined:
    29 Oct 2006
    Messages:
    68
    Likes Received:
    26
    Reputations:
    2
    меня это тоже смущает и компилятор почему-то молчит, НО. я писал аналогичную прогу на дельфи с той же формулой работает как часы.
     
  8. sni4ok

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

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    что значит смущает? это ошибка логики программы- и её стоит исправить, или ты из школы не усвоил, что извлекать арифметический корень можно не из отрицательных действительных чисел?
     
  9. 7ion

    7ion Banned

    Joined:
    29 Oct 2006
    Messages:
    68
    Likes Received:
    26
    Reputations:
    2
    2sni4ok: для чистоты эксперимента: yf = -40, и в формуле все минусы на плюсы - тоже самое => проблема не в этом.
     
  10. sni4ok

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

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    приведи конечный код всей программы со всеми обьявлениями.
     
  11. 7ion

    7ion Banned

    Joined:
    29 Oct 2006
    Messages:
    68
    Likes Received:
    26
    Reputations:
    2
    no problem? держи - www.krsun.ocpi.ru/laba1.cpp
     
  12. Dumkopff

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

    Joined:
    5 Apr 2006
    Messages:
    60
    Likes Received:
    25
    Reputations:
    0
    http://ru.wikibooks.org/wiki/Комплексные_числа
     
  13. sni4ok

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

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    в твоём исходнике вызов идёт oval2(0,40);

    так что в цикл while() даже не заходит.
     
  14. sni4ok

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

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    я же явно указал, для множества действительных чисел
     
  15. 7ion

    7ion Banned

    Joined:
    29 Oct 2006
    Messages:
    68
    Likes Received:
    26
    Reputations:
    2
    блин точно работает. Спасибо за помощь. тогда будем думать как сохранить работоспособность формулы при положительных значениях