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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 236, средняя оценка - 4.82
cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
#1

натуральный логарифм - C++

29.01.2010, 15:14. Просмотров 31690. Ответов 11
Метки нет (Все метки)

по каким причинам натуральный логарифм может выдавать неточное число, а точнее неправильное число. например
C++
1
z=log(4*x);
при х равном одному или что эквивалентно log(4),результат которого должен быть 1.386, выводит чило -774932052 ??? как это исправить ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
29.01.2010, 15:19     натуральный логарифм #2
Может Вы выводите данные не в том формате?
C
1
2
double n=log(4);
printf("%d\n",n);
выведет
мусор
а
C
1
2
double n=log(4);
printf("%f\n",n);
Выведет
1.386
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
29.01.2010, 15:29     натуральный логарифм #3
Непременно надо, чтоб в начале исходника стояло
#include <math.h>

Ежели этого нет, транслятор интерпретирует возвращенное log значение как целое
и получается абракадабрия
cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
29.01.2010, 15:50  [ТС]     натуральный логарифм #4
интересно, а для экспоненты подобные условия имеются?

Добавлено через 43 секунды
на счет вложенного файла конечно спасибо, но я в курсе
M128K145
Эксперт С++
8282 / 3501 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
29.01.2010, 15:53     натуральный логарифм #5
Цитата Сообщение от Day Посмотреть сообщение
Непременно надо, чтоб в начале исходника стояло
#include <math.h>
Ежели этого нет, транслятор интерпретирует возвращенное log значение как целое
и получается абракадабрия
Ежели этого нет, то вообще не известно, что такое log и ни о каком типе возвращаемого значения речи быть не может
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
29.01.2010, 17:28     натуральный логарифм #6
как это исправить ?
Чтобы бы исправлять нужно выложить готовую программу, а не одну строку кода.
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
29.01.2010, 21:10     натуральный логарифм #7
M128K145,
Ежели этого нет, то вообще не известно, что такое log и ни о каком типе возвращаемого значения речи быть не может
При трансляции файла с расширением .C неопознанные (необъявленные) функции трактуются
как возвращающие int. Ну, может warring выдать (если вы его об этом попросите)
С расширнием .CPP все значительно строже, будет ошибка трансляции.
Вр всяком случае это так у трансляторов серии Борланд
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
30.01.2010, 13:37     натуральный логарифм #8
Day, не надо нести чушь. Вызов необъявленных функций запрещён - просто потому, что неизвестно, что вызывать. Даже Борланд не знает, как вызывать неизвестные функции. Функция трактуется, как возвращающая тип int, если при её объявлении не указан тип возвращаемого значения (что вызывает предупреждения, но не ошибку).
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
31.01.2010, 10:37     натуральный логарифм #9
Вызов необъявленных функций запрещён - просто потому, что неизвестно, что вызывать.
В языке C можно вызвать.
Что значит неизвестно ?
Имя функции есть, код функции есть в библиотеке. Все вызовется.
Другое дело, что по умолчанию считается int func(), а там реально может быть double func().
Вот тебе код:
C
1
2
3
4
5
6
int main( void ) {
 
sqrt( 10.0 );
return 0;
 
}
Добавлено через 2 минуты
Даже Борланд не знает, как вызывать неизвестные функции.
Вот кто-кто, а Borland так вообще не эталон.

Функция трактуется, как возвращающая тип int, если при её объявлении не указан тип возвращаемого значения (что вызывает предупреждения, но не ошибку).
А также если вообще отсутствует объявление, то функция считается как возвращающая int.
Вот код:
C
1
2
3
4
5
6
7
8
9
10
11
12
int main( void ) {
 
my_func( 10.0 );
return 0;
 
}
 
double my_func( double x ) {
 
return 5.0;
 
}
Компиляция:
Код
1.c: In function 'main':
1.c:4: warning: implicit declaration of function 'my_func'
1.c: At top level:
1.c:9: error: conflicting types for 'my_func'
1.c:4: note: previous implicit declaration of 'my_func' was here
Добавлено через 1 минуту
Но там не компилируется, потому что вызывает ошибку.
А вот ниже код, который скопилируется - без объявления my_func().
C
1
2
3
4
5
6
7
8
9
10
11
12
int main( void ) {
 
my_func( 10.0 );
return 0;
 
}
 
int my_func( double x ) {
 
return 5;
 
}
Компиляция:
Код
1.c: In function 'main':
1.c:4: warning: implicit declaration of function 'my_func'
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
31.01.2010, 17:12     натуральный логарифм #10
холи макарони... Н-да, век живи - век учись. Такое ощущение, что Керниган и Ритчи в Челябинске этот Си изобретали...
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
31.01.2010, 19:47     натуральный логарифм #11
Язык Си - это низкоуровневый ассемблер.
От ассемблера собственно отличается:
1) переносимость на разные платформы
2) писать код проще, быстрее, надежнее

Если взять стандарт C99 - то это уже совершенно не тот C, который K&R
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2010, 16:14     натуральный логарифм
Еще ссылки по теме:

C++ Логарифм
C++ Как в С++ реализовать(записать) LN (натуральный логарифм по основанию е)?
C++ Натуральный логарифм N слагаемых
Натуральный логарифм в asm C++
Найти наименьший натуральный делитель числа C++

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

Или воспользуйтесь поиском по форуму:
cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
01.02.2010, 16:14  [ТС]     натуральный логарифм #12
мужики))) не ругайтесь)) борлад не борланд)) мне просто интересно было почему логарифм может не то выводить, оказывается что тип нужно явно указать, а если я математическую функцию спрашивал, то естественно знаю что для sqrt(),pow(),log() и тп нужно включать <math.h>))
думаютема исчерпана. всем спасибо)
Yandex
Объявления
01.02.2010, 16:14     натуральный логарифм
Ответ Создать тему
Опции темы

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