Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
ivanydze
11 / 11 / 4
Регистрация: 18.11.2010
Сообщений: 28
1

почему Trunc(7) = 6 ?

01.03.2011, 23:07. Просмотров 1042. Ответов 3
Метки нет (Все метки)

Вот совсем недавно попал на такою ошибку в паскале :
при 128 она пишет не правильный результат! а при других значениях всегда правильный)
x:=128; // вводим число - два в какой-то степени. например 16,32,64,128..

writeln(ln(x)/ln(2)); // при все вводимых значениях эта функция выводит степень двойки.

Однако если я поставлю

writeln(TRUNC(ln(x)/ln(2)); // и введу седьмую степень двойки -> 128 она напишет что это шестая степерь))

// Однако если выводить значения ввиде:
writeln((ln(x)/ln(2)):0:0); // получаем нашу 7 !!

пробовал также: INT(ln(x)/ln(2)) тоже 6.

что удивительно FRAC(ln(x)/ln(2)) выдаёт

вот программа:

Pascal
1
2
3
4
5
6
7
8
9
10
11
var
x:longint;
 
begin
 
readln(x);
// программа возвращает в какой степени двойка (если ввели 2-1 4-2 8-3 16-4 32-5 64-6 128-6!!!!! 256-8 512-9.. и тд..)
writeln(Trunc(ln(x)/ln(2)));
readln;
 
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2011, 23:07
Ответы с готовыми решениями:

N:=trunc(Xk+Xn)/dX+1)
помогите пожалуйста! что обозначает эта функция? N:=trunc((Xk+Xn)/dX+1)

trunc vs div
Какая разница между функциями trunc() и div? Взбрело в голову. Добавлено...

Что такое trunc?
алгоритм простых чисел program easyNumber; var i,j,h,x:longint; ...

Как определить case trunc()?
дана система 1) x, 0<=x<5; 2)x+1, 5<=x<10; 3)2*x, 10<=x<15; 4)x*x,...

Определить тип выражения: trunc(-3.14)
Определить тип выражения: trunc(-3.14)

3
_LoneR_
90 / 90 / 13
Регистрация: 15.01.2011
Сообщений: 494
01.03.2011, 23:22 2
7 не входит в степень двойки! А tranc возвращает ближайшее целое число если смотреть по примеру если 7 не входит тогда это 6. Я для себя так понял.
0
ivanydze
11 / 11 / 4
Регистрация: 18.11.2010
Сообщений: 28
01.03.2011, 23:25  [ТС] 3
Цитата Сообщение от _LoneR_ Посмотреть сообщение
7 не входит в степень двойки! А tranc возвращает ближайшее целое число если смотреть по примеру если 7 не входит тогда это 6. Я для себя так понял.
там имелось ввиду не 7 а 2^7 =128 а программа должна выводить в какой степени была двойка - тоесть должа написать 7 .


2^X=Y

X=Ln(Y)/Ln(2)
0
Sunman
56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
02.03.2011, 00:05 4
Цитата Сообщение от ivanydze Посмотреть сообщение
там имелось ввиду не 7 а 2^7 =128 а программа должна выводить в какой степени была двойка - тоесть должа написать 7 .


2^X=Y

X=Ln(Y)/Ln(2)
Погрешности вычисления. Нужно помнить, что у натурального логарифма основание - экспонента, а она по сути уходит в бесконечность. Здесь бы round подошел больше.

И trunc не возвращает ближайшее целое, а отрезает дробную часть.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2011, 00:05

Вычислить у используя Round или Trunc
Кто разбирается в этом, помогите хоть как-то, не могу вообще понять что и как ...

Выделение цифр числа без использования div,mod,trunc,round и строковых
И операции деления /. Задача звучит не так, но то, что я не знаю, я озвучил в...

Округление дробного числа до ближайшего целого без функций "Round", "Trunc"
По заданию требуется записать алгоритм округления вещественного числа до...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru