Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2012, 19:15   #1
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
По умолчанию Точность в математических вычислениях

Здравствуйте. Изучая C++ решил создать собственный калькулятор. Возникла проблема, не могу сделать калькулятор точным: после плавающей запятой мало цифр, например 6.66667. Хотя бы 10 цифр после запятой и было бы гораздо лучше. Надеюсь опытные программисты помогут. Ниже фрагменты программы.
Действия после нажатия кнопки равно:
Код:
char* t = (char*)(void*)Marshal::StringToHGlobalAnsi(textBox1->Text);
temp2 = atof(t); // глобальная переменная типа double
System::String^ str;
str = gcnew String(t);
/*вычисление*/
double res = fun(temp1, temp2, akt); //функция, которая делает вычисления; temp1 - число введённое первым, akt - действие +-/*
sprintf(t, "%g", res); //!!!!!думаю сменить нужно что-то здесь.
str = gcnew String(t);
textBox1->Text=str;
Функция, которая делает вычисления:
Код:
double fun(double a, double b, char *d)
{
switch (*d) 
{
  case '+' : return(a+b);
  case '-' : return(a-b);
  case '*' : return(a*b);
  case ':' : return(a/b);
}
}
kuy вне форума Ответить с цитированием
Старый 31.07.2012, 19:48   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Здесь вопрос не в точности вычисления, а в точности вывода. Вам помогут манипуляторы ввода-вывода. Проверьте, например, такой код:
Код:
#include <iostream>
#include <iomanip>

int main()
{
double a = 1.0 / 3;
std::cout << a << std::endl;
std::cout << std::setprecision(20) << a << std::endl;
std::cin.ignore();
std::cin.get();
}
P.S. Да, еще не по теме. У вас код не на чистом C++, а на т.н. C++ CLI, гибриде C++ и C#. Я бы вам от себя посоветовал забыть про этого "не мышонка, не лягушку", а выбрать что-то одно - плюсы для нативных приложений или шарп для платформы .NET
И еще:
Код:
double fun(double a, double b, char *d)
Почему бы не сделать просто char d?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же

Последний раз редактировалось Гром; 31.07.2012 в 19:53.
Гром вне форума Ответить с цитированием
Старый 31.07.2012, 23:02   #3
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
По умолчанию

Гром, спасибо, не знал о std::setprecision(). Только для меня не подходит эта функция, так как я делаю программу не в консоли, а в визуальном режиме. Мне бы double-число в char* или string записать..
Цитата:
Почему бы не сделать просто char d?
В моём случае просто char d не работает. Я передаю в функцию только адрес переменной, с ним работаю с помощью указателя на него. Можно конечно как-то переделать, но мне это на лекциях в универе давали(передача параметров функции с использованием указателя),
почему бы не использовать если работает)
Цитата:
У вас код не на чистом C++, а на т.н. C++ CLI, гибриде C++ и C#
Пишу на Microsoft Visual C++ 2010. В универе мы пока только консоль C++ разобрали, в основном что на хожу в интернете нахожу, то и пишу, видимо что-то с C++ CLI взял. Ну я особо не понимаю о чём идёт речь.
kuy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при вычислениях. Kovy Помощь студентам 3 20.02.2011 12:06
Болшая точность Zeir Помощь студентам 6 10.10.2010 18:57
Точность обработки БД в С++ Maks7482 Общие вопросы C/C++ 3 23.08.2010 13:34
о параллельных вычислениях motorway PHP 4 20.09.2009 18:22
Точность Sour Помощь студентам 2 31.05.2007 21:08