Форум программистов, компьютерный форум CyberForum.ru

Объясните почему так - C++

Восстановить пароль Регистрация
 
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
30.10.2012, 17:28     Объясните почему так #1
Когда я ввожу следующие числа:
x = 2222222222
n = 3333333333

И

x = 2222222221 (один знак поменяли)
n = 3333333333

То ответы выходя одинаковые. С чем это связано?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <math.h>
 
void f(double x, double n)
{
    if(x-n>10) printf("kvad.koren: %f\n", pow(x-n, 1.0/2.0));
    if(x<=n) printf("kyb. koren: %f\n", pow(fabs(x-n),1.0/3.0));
    if(5<=x-n && x-n<=10) printf("raznost kvad. kornei: %f\n", (pow(x, 1.0/2.0)-pow(n, 1.0/2.0)));
    if(0<x-n && x-n<=5) printf("sin(x) - cos(n) = %f\n", (sin(3.14159265/180*x) - cos(3.14159265/180*n)));
}
 
int main() 
{
    double x, n;
    printf("vvedite X\n");
    scanf("%lf", &x);
    printf("vvedite N\n");
    scanf("%lf", &n);
    f(x, n);
 
    getchar();
    getchar();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
30.10.2012, 17:31     Объясните почему так #2
Неверные условия у тебя, походу.
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
30.10.2012, 17:43  [ТС]     Объясните почему так #3
Цитата Сообщение от Герц Посмотреть сообщение
Неверные условия у тебя, походу.
Они верны, дело в другом. Мне говорили что дело в scanf, что мол он не может считывать нормально столь большие числа, но вот понять я никак не могу почему так. Кто-нибудь может разъяснить?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.10.2012, 19:00     Объясните почему так #4
Цитата Сообщение от aleksand Посмотреть сообщение
Мне говорили что дело в scanf, что мол он не может считывать нормально столь большие числа
Это не тот случай. В данном случае, при таких входных данных, чтобы увидеть разницу напишите например так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <math.h>
 
void f(double x, double n)
{
    if(x-n>10) printf("kvad.koren: %.10lf\n", pow(x-n, 1.0/2.0));
    if(x<=n) printf("kyb. koren: %.10lf\n", pow(fabs(x-n),1.0/3.0));
    if(5<=x-n && x-n<=10) printf("raznost kvad. kornei: %.10lf\n", (pow(x, 1.0/2.0)-pow(n, 1.0/2.0)));
    if(0<x-n && x-n<=5) printf("sin(x) - cos(n) = %.10lf\n", (sin(3.14159265/180*x) - cos(3.14159265/180*n)));
}
 
int main() 
{
    double x, n;
    printf("vvedite X\n");
    scanf("%lf", &x);
    printf("vvedite N\n");
    scanf("%lf", &n);
    f(x, n);
 
    getchar();
    getchar();
    return 0;
}
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
30.10.2012, 19:12  [ТС]     Объясните почему так #5
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Это не тот случай. В данном случае, при таких входных данных, чтобы увидеть разницу напишите например так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <math.h>
 
void f(double x, double n)
{
    if(x-n>10) printf("kvad.koren: %.10lf\n", pow(x-n, 1.0/2.0));
    if(x<=n) printf("kyb. koren: %.10lf\n", pow(fabs(x-n),1.0/3.0));
    if(5<=x-n && x-n<=10) printf("raznost kvad. kornei: %.10lf\n", (pow(x, 1.0/2.0)-pow(n, 1.0/2.0)));
    if(0<x-n && x-n<=5) printf("sin(x) - cos(n) = %.10lf\n", (sin(3.14159265/180*x) - cos(3.14159265/180*n)));
}
 
int main() 
{
    double x, n;
    printf("vvedite X\n");
    scanf("%lf", &x);
    printf("vvedite N\n");
    scanf("%lf", &n);
    f(x, n);
 
    getchar();
    getchar();
    return 0;
}
А если ввести числа, состоящие из 100 символов, то это будет тот случай? В каком случае scanf не сможет прочесть то, что мы ему введём?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.10.2012, 19:29     Объясните почему так #6
Цитата Сообщение от aleksand Посмотреть сообщение
А если ввести числа, состоящие из 100 символов, то это будет тот случай? В каком случае scanf не сможет прочесть то, что мы ему введём?
Это будет тот случай.
Не поленитесь, почитайте, очень интересная статья на эту тему:
http://www.cyberforum.ru/blogs/18334/blog88.html
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
30.10.2012, 19:31  [ТС]     Объясните почему так #7
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Это будет тот случай.
Не поленитесь, почитайте, очень интересная статья на эту тему:
http://www.cyberforum.ru/blogs/18334/blog88.html
Как раз подобное я сегодня и искал в гугле, но так нормальной статьи , не нашёл. Спасибо огромное.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2012, 19:34     Объясните почему так
Еще ссылки по теме:

C++ Объясните, почему окно закрывается даже при cin.get(); хотя код правильный?
нарушение прав доступа при записи. объясните, почему? и как избежать? C++
Объясните пожалуйста, почему не запускается? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
30.10.2012, 19:34     Объясните почему так #8
Цитата Сообщение от aleksand Посмотреть сообщение
Спасибо огромное.
спасибо автору этой статьи, он старался.
Yandex
Объявления
30.10.2012, 19:34     Объясните почему так
Ответ Создать тему
Опции темы

Текущее время: 15:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru