2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Математические функции в C++ over 15 знаков
Сообщение08.11.2010, 23:16 
Заслуженный участник
Аватара пользователя


28/07/09
1238
Как известно, мат. функции из "math.h" имеют тип double аргумента и значения. Мне же нужна точность $10^{-19}$. Как это по-простому сделать? Спасибо.
Добавлено: На всякий случай скажу, это нужно сделать без использования каких-то нестандартных библиотек.

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение08.11.2010, 23:41 
Заслуженный участник


04/05/09
4587
Может быть Вам хватит точности 'long double' на GCC/ICC?
Это 80-ти битный внутренний тип с плавающей точкой. Многие функции в math.h имеют вариант с этой точностью. Тип нестандартный, так что смотрите непосредственно свой хедер, хотя в манах тоже может быть.

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 00:57 
Заслуженный участник
Аватара пользователя


28/07/09
1238
Спасибо! Но у меня ничего не получилось. Я пока еще совсем плохо разбираюсь. Вот мой первоначальный код:
Код:
#include "stdio.h"
#include "math.h"

int main()
{
  double sup,inf,A,x;
  sup=exp(1.0);
  inf=1/exp(1.0);
  scanf("%lf",&A);
  if(A>=inf && A<=sup) {x=exp(log(A)/A); printf("%.19f",x);} else {printf("NO");}
  return 0;
}

Ищу корень уравнения $x^{x^{x^{x^{x^{...}}}}}=A$ с точностью $10^{-19}$.
Что нужно исправить? Я попробовал объявить переменные как long double, поставить постфикс l к логарифму и экспоненте, заменить ".19f" на ".19Lf", но ничего не вышло. По-прежнему после 15 знака идут нули (как минимум на одном тесте). Как правильно?

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 01:15 
Заслуженный участник
Аватара пользователя


06/10/08
6422
venco в сообщении #372565 писал(а):
Это 80-ти битный внутренний тип с плавающей точкой. Многие функции в math.h имеют вариант с этой точностью. Тип нестандартный, так что смотрите непосредственно свой хедер, хотя в манах тоже может быть.
Почему нестандартный? C99.

-- Вт ноя 09, 2010 01:21:52 --

Legioner93 в сообщении #372598 писал(а):
Что нужно исправить? Я попробовал объявить переменные как long double, поставить постфикс l к логарифму и экспоненте, заменить ".19f" на ".19Lf", но ничего не вышло. По-прежнему после 15 знака идут нули (как минимум на одном тесте). Как правильно?

C99 писал(а):
7.12.6 Exponential and logarithmic functions
7.12.6.1 The exp functions

Synopsis
Код:
#include <math.h>
double exp(double x);
float expf(float x);
long double expl(long double x);

Description
The exp functions compute the base-e exponential of x. A range error occurs if the magnitude of x is too large.

Returns
The exp functions return $e^x$ .
Значит, надо использовать не exp, а expl

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 01:24 
Заслуженный участник
Аватара пользователя


28/07/09
1238
Код:
#include "stdio.h"
#include "math.h"

int main()
{
    long double sup,inf,A,x;
    sup=expl(1.0);
   inf=1/expl(1.0);
   scanf("%Lf",&A);
   if(A>=inf && A<=sup) {x=expl(logl(A)/A); printf("%.19Lf",x);} else {printf("NO");}
   return 0;
}

Так? Не работает.

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 01:28 
Заслуженный участник


04/05/09
4587
Xaositect в сообщении #372603 писал(а):
Почему нестандартный? C99.
Так вопрос был про C++, а в нём long double не стандартизован.

Кстати, вопрос к Legioner93 - а почему Ваш C++ так похож на C?

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 01:34 
Заслуженный участник
Аватара пользователя


28/07/09
1238
Возможно потому что таким его преподносят на семинарах. И учебник у меня "Керниган, Ритчи. Язык программирования C (ANSI C)". А какую вы посоветуете книжку?

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 01:36 
Заслуженный участник
Аватара пользователя


06/10/08
6422
venco в сообщении #372607 писал(а):
Так вопрос был про C++, а в нём long double не стандартизован.
А, я-то на код смотрю.
Legioner93 в сообщении #372606 писал(а):
Так? Не работает.
У меня работает (Debian GNU/Linux unstable, GCC 4.5.1, eglibc 2.11.2, -std=c99). С g++ тоже работает.

-- Вт ноя 09, 2010 01:37:47 --

Legioner93 в сообщении #372611 писал(а):
Возможно потому что таким его преподносят на семинарах. И учебник у меня "Керниган, Ритчи. Язык программирования C (ANSI C)". А какую вы посоветуете книжку?
Лично я советую программировать дальше на C, но не называть его C++ :)

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 01:44 
Заслуженный участник
Аватара пользователя


28/07/09
1238
У меня Microsoft Visual C++ 2010 Express. На нем не работает. Сейчас попробую отправить на GNU C++ 3.3.3.
Добавлено: Компилятор принял, задачу мне засчитали, спасибо! Хотя остался вопрос, как бы мне воочию увидеть эти 19 знаков на своём Visual Studio.
Ну я думаю, у нас не зря в программе на этот семестр C++ стоит, а не C. Хотя я разницы не знаю :oops:

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 01:48 
Заслуженный участник


04/05/09
4587
А у меня на cygwin g++ 4.3.4 работает только с оптимизацией и с __builtin_expl и __builtin_logl. :-(
Стандартный хедер expl и logl не определяют, в библиотеке они есть, но работают, похоже с точностью double.
Если использовать builtin варианты с оптимизацией, то всё хорошо. Без оптимизации они вызывают expl и logl, и облом.
Вот такой нестандарт.

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 01:50 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Legioner93 в сообщении #372615 писал(а):
Ну я думаю, у нас не зря в программе C++ стоит, а не C. Хотя я разницы не знаю Пока не знаю.
Ну тогда venco придет, мб посоветует что-нибудь по C++. Я C++ не люблю и знаю, соответственно, плохо.

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 11:22 


04/11/10

141
Legioner93 в сообщении #372615 писал(а):
остался вопрос, как бы мне воочию увидеть эти 19 знаков на своём Visual Studio.

только при использовании ассемблера или самому запрограммировать эту точность.

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 14:39 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
Майкрософтовский компилятор C (который в Visual C++) не поддерживает long double, точнее, считает, что long double — это просто double.

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 16:44 
Заслуженный участник
Аватара пользователя


28/07/09
1238
Ага. Сейчас убедился на примере новой задачи, что он еще и не поддерживает long long. А у меня в условии числа не превышают $2^{63}-1$ :-(

 Профиль  
                  
 
 Re: Математические функции в C++ over 15 знаков
Сообщение09.11.2010, 16:57 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Legioner93 в сообщении #372791 писал(а):
Ага. Сейчас убедился на примере новой задачи, что он еще и не поддерживает long long. А у меня в условии числа не превышают $2^{63}-1$ :-(
ЕМНИП, там он называется int64. Ну то есть long long и int64 это разные вещи по смыслу, но в MSVC long long появился только недавно, а int64 был давно. Спецификатор формата %I64.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group