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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.96
s13jl8
Сообщений: n/a
#1

Ошибка error C3861: erfc: идентификатор не найден - C++

15.03.2013, 09:16. Просмотров 3606. Ответов 7
Метки нет (Все метки)

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
#include<iostream>
#include<fstream>
#include<math.h>
 
using namespace std;
 
int main()
{
    ifstream file;
    file.open("outb.txt");
 
    char t[2];
    int n=0,one=0,V=0,i=0;
    float Sn=0,pi=0,tau;
    while(!file.eof())
    {
        file>>t[0];
        if(t[0]=='1') one++;
        if(t[0]=='-') continue;
        Sn=Sn+2*(t[0]-48)-1;
        n++;
    }
    file.close();
    file.open("outb.txt");
    tau=2/sqrt(n);
    pi=(float)one/n;
    if(fabs(pi-0.5)<tau)
    {
        file>>t[0];
        while(!file.eof())
        {
             file>>t[1];
             if (t[0]!=t[1]) V=V+1;
             t[0]=t[1];
        }
    }
    Sn=fabs(Sn)/sqrt(n);
    cout<<"Frequency Test. p="<<erfc(Sn/sqrt(2))<<endl;
    cout<<"Runs Test. p="<<erfc(fabs(V-2*pi*n*(1-pi))/(2*sqrt(2*n)*pi*(1-pi)))<<endl;
    file.close();
    return 0;
имею на выходе
error C3861: erfc: идентификатор не найден
Подскажите, что делать, из интернета для себя вынес только, что функция входит начиная с версии C99, но мне это не о чем не говорит. Пишу в Visual Studio 2012.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UnsKneD
алкокодер
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
15.03.2013, 09:59     Ошибка error C3861: erfc: идентификатор не найден #2
s13jl8, http://ab-initio.mit.edu/wiki/index....ddeeva_Package
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
15.03.2013, 10:13     Ошибка error C3861: erfc: идентификатор не найден #3
MS не стали реализовывать не стандартную, как они считают, функцию.
Судя по http://msdn.microsoft.com/en-us/library/hh308292.aspx функция есть в amp_math.h.

Ну или вот код с какого-то форума.
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
static const double rel_error= 1E-12;        //calculate 12 significant figures
//you can adjust rel_error to trade off between accuracy and speed
//but don't ask for > 15 figures (assuming usual 52 bit mantissa in a double)
 
double erfc(double x)
//erfc(x) = 2/sqrt(pi)*integral(exp(-t^2),t,x,inf)
//        = exp(-x^2)/sqrt(pi) * [1/x+ (1/2)/x+ (2/2)/x+ (3/2)/x+ (4/2)/x+ ...]
//        = 1-erf(x)
//expression inside [] is a continued fraction so '+' means add to denominator only
{
    static const double one_sqrtpi=  0.564189583547756287;        // 1/sqrt(pi)
    if (fabs(x) < 2.2) {
        return 1.0 - erf(x);        //use series when fabs(x) < 2.2
    }
    if (signbit(x)) {               //continued fraction only valid for x>0
        return 2.0 - erfc(-x);
    }
    double a=1, b=x;                //last two convergent numerators
    double c=x, d=x*x+0.5;          //last two convergent denominators
    double q1, q2= b/d;             //last two convergents (a/c and b/d)
    double n= 1.0, t;
    do {
        t= a*n+b*x;
        a= b;
        b= t;
        t= c*n+d*x;
        c= d;
        d= t;
        n+= 0.5;
        q1= q2;
        q2= b/d;
      } while (fabs(q1-q2)/q2 > rel_error);
    return one_sqrtpi*exp(-x*x)*q2;
}
UnsKneD
алкокодер
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
15.03.2013, 10:20     Ошибка error C3861: erfc: идентификатор не найден #4
lemegeton, функция есть, но как её заставить работать... у меня так и не получилось, ругалось на AMP
s13jl8
Сообщений: n/a
15.03.2013, 11:07     Ошибка error C3861: erfc: идентификатор не найден #5
UnsKneD, я находил это, но не понял, как воспользоваться, ибо в программировании совсем уж начинающий.
lemegeton, amp_math.h попробовал подключить, ничего не изменилось
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
15.03.2013, 11:37     Ошибка error C3861: erfc: идентификатор не найден #6
Цитата Сообщение от UnsKneD Посмотреть сообщение
ругалось на AMP
Видимо, надо слинковать.

Цитата Сообщение от s13jl8 Посмотреть сообщение
amp_math.h попробовал подключить, ничего не изменилось
Видимо, надо воспользоваться упомянутым по ссылке namespace'ом и линковать с AMP. Не заморачивайтесь, воспользуйтесь приведенным мной кодом. Он похож на правильный.
UnsKneD
алкокодер
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
15.03.2013, 17:28     Ошибка error C3861: erfc: идентификатор не найден #7
lemegeton, нет не на линкову, на рестрикт, хотя другие функции работают, sin(), cos() и т.д. а erfc(), erf()

error: ни у одной из перегрузок нет правильных спецификаторов restrict
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2013, 22:26     Ошибка error C3861: erfc: идентификатор не найден
Еще ссылки по теме:

Math.h error C3861: cos: идентификатор не найден C++
C++ Error C3861: back_inserter: идентификатор не найден
Error C3861: _tcsdup: идентификатор не найден C++
Ошибка сортировки "error C3861: merge: идентификатор не найден" C++
C++ Ошибка компиляции Error C3861, идентификатор не найден

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

Или воспользуйтесь поиском по форуму:
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
15.03.2013, 22:26     Ошибка error C3861: erfc: идентификатор не найден #8
Цитата Сообщение от UnsKneD Посмотреть сообщение
lemegeton, нет не на линкову, на рестрикт, хотя другие функции работают, sin(), cos() и т.д. а erfc(), erf()

error: ни у одной из перегрузок нет правильных спецификаторов restrict
Спецификатор restrict это некая специфичная для AMP фича. К сожалению, я с AMP напрочь не знаком. Лучше почитать какие-нибудь туториалы.
Yandex
Объявления
15.03.2013, 22:26     Ошибка error C3861: erfc: идентификатор не найден
Ответ Создать тему
Опции темы

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