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

Log по основанию 2 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 176, средняя оценка - 4.63
Parallelogram
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 70
17.01.2011, 13:48     Log по основанию 2 #1
Люди, помогите!!!
Нужно написать функцию (Log по основанию 2).
Я делал через классы. Так что, все что можно было перегрузить (+,-,*,/) я перегрузил.
за скорость плачу
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2011, 13:48     Log по основанию 2
Посмотрите здесь:

C++ Функция для приближённого вычисления Log x по основанию 2 с помощью многочлена наилучшего приближения
C++ по заданым значениям х и у найти значение величины log x y (log с основанием х )
по заданым значениям х и у найти значение величины log x y (log с основанием х ).не получается. C++
Перевод из системы по основанию 10 в систему по основанию 8 C++
C++ Логарифм m по основанию n
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
deadlock
 Аватар для deadlock
372 / 351 / 7
Регистрация: 14.12.2010
Сообщений: 1,265
17.01.2011, 14:00     Log по основанию 2 #2
так а в чем проблема использовать функцию log10() из math.h, ну нужен тебе log(x) по основанию 2, ну и будет это: log10(x)/log10(2)
Parallelogram
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 70
17.01.2011, 15:57  [ТС]     Log по основанию 2 #3
В этом то и проблема.
я должен сам "с нуля" написать функцию, преобразуя ряд Фурье или там какой-н. др логарифмический ряд.
поэтому math.h не поможет
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.01.2011, 16:48     Log по основанию 2 #4
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
#include <iostream>
#include <iomanip>
#include <cmath>
 
double lnx(double);
 
int main()
{
    double x;
 
    std::cout << "Enter x: ";
    std::cin >> x;
 
    std::cout << std::setprecision(15) << "Lib Ln(x) = " << log(x) << std::endl;
    std::cout << std::setprecision(15) << "My  Ln(x) = " << lnx(x) << std::endl;
 
    return 0;
}
 
double lnx(double x)
{
    int a = 0;
 
    while (static_cast< int >(x) != 0)
    {
        x /= 10.0;
        ++a;
    }
 
    x -= 1;
 
    int n = 1;
    double an = -1.0;
    double result = 0.0;
 
    do
    {
        an *= -x;
        result += an / n;
        ++n;
    }
    while (an > 0 ? an : -an > 1E-16);
 
    return result + a * 2.302585092994046;
}
Parallelogram
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 70
17.01.2011, 19:25  [ТС]     Log по основанию 2 #5
silent_1991, спасибо.
я переделал твой код.
он послужил основой для моего.

Добавлено через 35 минут
теперь еще проблема:
Код
CRealNumber CRealNumber::Ln()
{
 CRealNumber xn, k, sigma = 0;
 x = -(1 - x) / (1 + x);
 xn=x;
for (int i=0; i<50; i++)
{
sigma+=xn;
k = x * x * (2 * i + 1) / (2 * i + 3);

xn = xn * k;
} 
return 2 * sigma;
}
выдает ошибки:
Error 2 error C2440: 'initializing' : cannot convert from 'int' to 'CRealNumber'
Error 3 error C2065: 'x' : undeclared identifier

я не понимаю что делать надо.


просто функцию я оформил:
Код
#include "stdafx.h"
#include <iostream>
using namespace std;


double ln(double x)
{
double xn, k, sigma = 0;
x = -(1 - x) / (1 + x);
xn=x;
for (int i=0; i<50; i++)
{

sigma+=xn;
k = x * x * (2 * i + 1) / (2 * i + 3);
cout << "\n" <<  x * x * (2 * i + 1) / (2 * i + 3)  << "\n";

xn*=k;
}
return 2 * sigma;
}

int main()
{
	double x;
cin >> x;
cout << ln(x);
	system("pause");
	return 0;
}
а переоформить ее в класс я не могу(
! ! ПОМОГИТЕ ! !
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.01.2011, 19:33     Log по основанию 2 #6
Parallelogram, у вас при вычислении значения типа CRealNumber происходит вычисление с использованием значения типа int. Вот он и говорит, что не может int к CRealNumber преобразовать. Более простой способ, использовать в качестве счётчика i значение типа CRealNumber, более сложный - перегрузить операцию приведения типа int к CRealNumber.

Добавлено через 27 секунд
Ну и x не объявлена.
Parallelogram
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 70
17.01.2011, 19:41  [ТС]     Log по основанию 2 #7
не понимаю:
>> использовать в качестве счётчика i значение типа CRealNumber <<
KAK
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.01.2011, 19:43     Log по основанию 2 #8
C++
1
for (CRealNumber i=0; i<50; i++)
Только перегрузите также операцию инкремента (лучше использовать преинкремент) и сравнения с числом типа int.
Parallelogram
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 70
17.01.2011, 19:53  [ТС]     Log по основанию 2 #9
неее, ничего не понимаю (
с функциями я еще более менее дружу (если бы не задание, я бы уже давно ими и сделал), а с классами я просто == NULL
даже смутно представляю как они работают
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.01.2011, 19:57     Log по основанию 2 #10
Цитата Сообщение от Parallelogram Посмотреть сообщение
Я делал через классы. Так что, все что можно было перегрузить (+,-,*,/) я перегрузил.
Как-то с вашим последним постом не вяжется...
Parallelogram
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 70
17.01.2011, 20:02  [ТС]     Log по основанию 2 #11
так перегрузку я делал 4 дня... и то не все условия удовлетворяются (касяков много)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
17.01.2011, 20:25     Log по основанию 2 #12
Parallelogram, киньте исходник.
Parallelogram
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 70
17.01.2011, 21:13  [ТС]     Log по основанию 2 #13
Прога:
Вложения
Тип файла: rar Log.rar (4.8 Кб, 55 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2011, 07:30     Log по основанию 2
Еще ссылки по теме:

Перевод из системы по основанию 16 в систему по основанию 10 C++
Перевод из системы по основанию 16 в систему по основанию 10 C++
Перевод из системы по основанию 8 в систему по основанию 10. C++

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

Или воспользуйтесь поиском по форуму:
Parallelogram
0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 70
18.01.2011, 07:30  [ТС]     Log по основанию 2 #14
Товарищи, кто поможет, конечно же не за просто так (200р)
Yandex
Объявления
18.01.2011, 07:30     Log по основанию 2
Ответ Создать тему
Опции темы

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