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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
#1

Неправильно идёт подсчёт в модуле математики - C++

11.09.2013, 14:30. Просмотров 312. Ответов 6
Метки нет (Все метки)

Подскажите пожалуйста... В программе у меня, когда я ввожу например число 10, у меня в синусе выводится (-0.544), однако, на самом деле, должно было быть около 0.1736...
А в арккосинусе вообще -1.#I0... Вот это-явно проблема...
Подскажите, в чём проблема?
Кликните здесь для просмотра всего текста

Я ввожу сразу в double, использую функции математики с double и вывожу в double по средствам функции printf...
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
25
26
27
28
29
30
31
32
33
34
#include "stdafx.h"//#define _CRT_SECURE_NO_WARNINGS
#include <math.h>
#include <locale.h>
#include <stdio.h>
#include <Windows.h>
double Result=0.0;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
 
    printf("Введите Ваше исходное число: ");
    scanf("%lf", &Result);
    system("cls");
    printf("Вы ввели следующее число = %0.3lf\n", Result);
    Sleep(1250);
    system("cls");
    printf("ТРИГОНОМЕТРИЧЕСКИЕ ФУНКЦИИ\n");
    printf("Синус Вашего числа равен = %0.3lf\n", (sin(Result)));
    printf("Косинус Вашего числа равен = %0.3lf\n", (cos(Result)));
    printf("Тангенс Вашего числа равен = %0.3lf\n", (tan(Result)));
    printf("Арккосинус Вашего числа равен = %0.3lf\n", (acos(Result)));
    printf("Арксинус  Вашего числа равен = %0.3lf\n", (asin(Result)));
    printf("Арктангенс Вашего числа равен = %0.3lf\n\n", (atan(Result)));
    printf("БАЗОВЫЕ ФУНКЦИИ:\n");
    printf("Модуль Вашего числа равен = %0.3lf\n", (abs(Result)));
    printf("Экспонента Вашего числа равна = %0.3lf\n", (exp(Result)));
    printf("Натуральный логарифм Вашего числа равен = %0.3lf\n", (log(Result)));
    printf("Квадратный корень Вашего числа равен = %0.3lf\n", (sqrt(Result)));
    printf("Ваше число в 9-й степени равно = %0.3lf\n", (pow(Result, 9)));
//Отображать мне нужно(хотелось бы, по крайней мере) так, что бы после точки, отображалось только 3 числа...
    system("pause");
    return 0;
}

P.S. Я подозреваю на размерность double, но навряд ли... Скорее всего, причина в выводе данных на экран.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2013, 14:30     Неправильно идёт подсчёт в модуле математики
Посмотрите здесь:

Проверьте задачку по циклам, неправильно работает. [думаю что неправильно] - C++
Спасибо что решили зайти. Задание выгладит так: http://*******/PW95p А результат выплнения: http://*******/KwhuS #include...

Функции с элементами математики - C++
Помогите с заданием, оно во вложении. Завтра сдача, выручайте. Заранее благодарен.

(+ - % / *) ошибка математики компилятора? - C++
Всем привет! Мне нужно мнение общественности, чтобы разобраться с одной непонятной, для меня, ситуацией. Среда разработки - Arduino...

На массив и знание математики - C++
1. Определить, в какой координатной четверти нахочится точка заданная координатами (x,y). 2. Массив Y Вычислить среднее геометрическое...

куда идёт запись? - C++
Подскажите пожалуйста, куда идёт запись? float x;//время голосования cout &lt;&lt;&quot;Время первого голосования:&quot;; cin &gt;&gt;x; cout &lt;&lt;&quot;Время...

Итерационный алгоритм. Прикладные задачи математики! - C++
e^x=1+x/1!+x^2/2!+...x^n/n!+... помогите решить!и построить!

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
11.09.2013, 14:36     Неправильно идёт подсчёт в модуле математики #2
Тригонометрические функции принимают значения в радианах.
sin( 10 радиан ) = -0.544 примерно.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
11.09.2013, 14:41     Неправильно идёт подсчёт в модуле математики #3
Нет. Все правильно. sin(10)=-0.544.... - можешь сам проверить на Калькуляторе.
Ты не забыл случайно, что функция sin принимает аргумент в радианной мере, а не в градусной?

А насчет арккосинуса.... посмотри на область определения этой функции.
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
11.09.2013, 14:45     Неправильно идёт подсчёт в модуле математики #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>
#include<cmath>
 
using namespace std;
 
 
int main() {
    // sin( 30 градусов )
    cout << sin( 30.0 * M_PI / 180.0 ) << endl;
 
    return 0;
}
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
11.09.2013, 14:59  [ТС]     Неправильно идёт подсчёт в модуле математики #5
Спасибо за подсказки!
Я нашёл другой пример вычисления синуса числа...
Кликните здесь для просмотра всего текста

Проверял на калькуляторе. Результат был одинаковым и там, и там(разница была по моему только при Sin(45)(но там, она совсем не значительная...)...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"//#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <Windows.h>
 
#define PI 3.14
 
int _tmain(int argc, _TCHAR* argv[])
{
    double Result;
    scanf("%lf", &Result);
    system("cls");
    printf("%lf\n", (sin(Result*PI/180)));
    system("pause");
    return 0;
}


Добавлено через 7 минут
Немного ошибся...
C++
1
#define PI 3.14159265
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
11.09.2013, 15:00     Неправильно идёт подсчёт в модуле математики #6
Цитата Сообщение от Jack Wade Посмотреть сообщение
Я нашёл другой пример вычисления синуса числа...
то же самое, что и я написал выше, только #define M_PI определен в заголовке math.h с большей точностью чем 3.14
math.h
C++
1
2
3
...
# define M_PI       3.14159265358979323846  /* pi */
...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 22:32     Неправильно идёт подсчёт в модуле математики
Еще ссылки по теме:

-1.#IND в выводе. Что означает в контексте вычислительной математики? - C++
Добрый день, господа программисты! На паре по вычислительной математике преподаватель поставил задачу написать стандартную программу,...

Как можно подробнее напишите, что из математики нужно программисту - C++
Приветствую всех, друзья подскажите пожалуйста, вот говорят по разному, для изучения языка програмирования нужно знать математику, другие...

Почему при сборке Releas'а прога без VC++ не идёт? - C++
Прога использует библиотеки ДАО. Собираю как Release, на машине Win 98 она выдаёт ошибку MS VC++ Runtime Error.

дайте наводку, программисты и математики, как делать задачу подобного типа - C++
Условие задачи: Найти максимальное значение, которое может быть представлено при использовании типа unsigned char :pardon: P.S.:...


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

Или воспользуйтесь поиском по форуму:
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
15.09.2013, 22:32  [ТС]     Неправильно идёт подсчёт в модуле математики #7
Нашёл другой модуль(библиотеку), с которым, как Мне показалось, меньше "возни" с числами...
C++
1
#include <cmath>
Конкретный пример:
Кликните здесь для просмотра всего текста

Код программы(разделил пример на действия... и получил следующий код(вроде бы, правильно...)):
Кликните здесь для просмотра всего текста

Кликните здесь для просмотра всего текста

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "stdafx.h"//#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <cmath>
#include <Windows.h>
 
double a;
double b;
double c;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    printf("ВЫПОЛНЕНИЕ ПРОГРАММЫ - ЧАСТЬ [1]\n");
    Sleep(1250);
    system("cls");
    printf("ВВОД ДАННЫХ В ПЕРЕМЕННУЮ [A] = ");
    scanf("%lf", &a);
    system("cls");
    printf("ВВОД ДАННЫХ В ПЕРЕМЕННУЮ [B] = ");
    scanf("%lf", &b);
    system("cls");
    printf("ВВОД ДАННЫХ В ПЕРЕМЕННУЮ [C] = ");
    scanf("%lf", &c);
    system("cls");
    printf("Были введены следующие переменные:\n[A] = %0.3lf\n[B] = %0.3lf\n[C] = %0.3lf\n", a,b,c);
    system("pause");
    system("cls");
    printf("ВЫПОЛНЕНИЕ ОСНОВНЫХ ВЫЧИСЛЕНИЙ ПРОГРАММЫ - ЧАСТЬ [2]\n");
    Sleep(1250);
    system("cls");
        //ВЫПОЛНЕНИЕ ПУНКТА [1]
        double res1;
        res1=log10((2.000*c));
        printf("[1] = LOG(2.000*%0.3lf) = %0.3lf\n", c, res1);
        system("pause");
        system("cls");
 
        //ВЫПОЛНЕНИЕ ПУНКТА [2]
        double res2;
        res2=res1+b;
        printf("[2] = %0.3lf + %0.3lf = %0.3lf\n", res1, b, res2);
        system("pause");
        system("cls");
 
        //ВЫПОЛНЕНИЕ ПУНКТА [3]
        double res3;
        res3=res2-52.000;
        printf("[3] = %0.3lf - 52.000 = %0.3lf\n", res2, res3);
        system("pause");
        system("cls");
 
        //ВЫПОЛНЕНИЕ ПУНКТА [4]
        double res4;
        res4=a/4.000;
        res4--;
        printf("[4] = %0.3lf : 4.000 - 1.000 = %0.3lf\n", a, res4);
        system("pause");
        system("cls");
 
        //ВЫПОЛНЕНИЕ ПУНКТА [5]
        double FINAL;
        FINAL=res3/res4;
        printf("[FINAL] = %0.3lf : %0.3lf = %0.3lf\n", res3, res4, FINAL);
        system("pause");
        system("cls");
    printf("Программа завершена успешно!");
    Sleep(1250);
 
    return 0;
}

ДЕЙСТВИЯ ПРОГРАММЫ:
Кликните здесь для просмотра всего текста

1) - Вычисляем логарифм от (2*с)
2) - К логарифму (2*с) прибавляем число b
3) - Далее от (2*с)-b отнимаем 52
4) - Число a делим на 4 и от результата отнимает единицу
5) - Результат действия 3 делим на результат действия 4, и получаем ответ...
P.S. Проверял на калькуляторе-высчитывало вроде бы всё правильно...

Yandex
Объявления
15.09.2013, 22:32     Неправильно идёт подсчёт в модуле математики
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru