Воскресенье, 05.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

Проблема округления или что?
SeqularДата: Понедельник, 17.11.2008, 23:12 | Сообщение # 1
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Решал такую вот задачку.. Нужно найти округленный снизу логарифм по основанию 2 от числа X. Ну преобразовал его в:
Code

log_low := lg(x)/lg(2);

Ну оно разумеется типа Real. Ввожу 512 в качестве аргумента. Все верно, выдает 9.0000000000.
Пытаюсь откинуть дробную часть. Делаю Trunc(X) или Int(X) - одинаково, оставляет 8-рку... Это мне не подходит! Должна оставаться девятка. Как добиться? При всем при том, чтобы целая часть только в качестве ответа была (потому простое округление не подходит), например для числа 1023 должна быть та же самая 9-ка, а для 1024 - 10-ка уже


Поддерживаю также проект сообщество молодых сисадминов
 
AlexanderДата: Вторник, 18.11.2008, 00:51 | Сообщение # 2
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Quote (Seqular)
Все верно, выдает 9.0000000000.

Уже с округлением выдаёт. Проверять нужно так:
writeln(frac(log_low));
И выхода тут нет, машинное эпсилон однако... Придётся в ручную функцию писать, где проверить не является ли x степенью двойки.


Скажем дружно- нафиг нужно!
 
SeqularДата: Вторник, 18.11.2008, 06:11 | Сообщение # 3
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Alexander, Да, я так и проверил. Выдает дробную часть как 0.99999999996. Вот... А насчет проверки - у меня другая идея возникла. Погляди...
Функция log_low от аргумента 512 ~= 8.999999999. От 513 ~= 9.0006. Т.е. точность знака до 5-го... Можно просто проверить, если меньше определенного порога, то сделать Round, а если больше, то Int :).

Кстати, какого хрена Int(Х) возвращает Real? :() в чем суть ее тогда?


Поддерживаю также проект сообщество молодых сисадминов
 
AlexanderДата: Вторник, 18.11.2008, 06:25 | Сообщение # 4
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Quote (Seqular)
Т.е. точность знака до 5-го... Можно просто проверить, если меньше определенного порога, то сделать Round, а если больше, то Int :).

trunc, а не инт. Это называется "чтоб работало" biggrin .
Quote (Seqular)
Кстати, какого хрена Int(Х) возвращает Real? :() в чем суть ее тогда?

Обнуляет мантиссу. Нужен ЛонгИнт- используй trunc.


Скажем дружно- нафиг нужно!
 
SeqularДата: Вторник, 18.11.2008, 06:42 | Сообщение # 5
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Quote (Alexander)
Это называется "чтоб работало" .

Ну правда... В демо-задаче навряд-ли будут использоваться числа выше 16384, а это 14-ая степень.. Теперь, если взять 16383, получим 13,9999119, т.е. на 5-ой позиции после зпт. Ммм.. Можно взять точность E=0.00001 и каким-либо образом проверить дробную часть. Если она меньше точности в меньушю сторону или больше 1-E в большую, то нафига транкать число? Округлим и дело с концом :)))
Ну правильно я думаю или нет? smile
Quote (Alexander)
Обнуляет мантиссу

Понятно. Спасибо


Поддерживаю также проект сообщество молодых сисадминов
 
AlexanderДата: Вторник, 18.11.2008, 23:02 | Сообщение # 6
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Quote (Seqular)
Ну правильно я думаю или нет?

Если надо только, чтоб работало- то прокатит smile . Точность можно смело 9 знаков брать.


Скажем дружно- нафиг нужно!
 
SeqularДата: Среда, 19.11.2008, 06:24 | Сообщение # 7
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Quote (Alexander)
Точность можно смело 9 знаков брать

Да не знаю, какие числа нужно брать, чтобы ошибка до 9-го знака добралась... Ориентировочно - степень 30-40ая.. А это уже за Integer. Но сделал с точностью, сработало smile


Поддерживаю также проект сообщество молодых сисадминов
 
AlexanderДата: Среда, 19.11.2008, 07:02 | Сообщение # 8
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Quote (Seqular)
Да не знаю, какие числа нужно брать, чтобы ошибка до 9-го знака добралась...

Это точность 9 знаков, а ошибка 1 или 2.


Скажем дружно- нафиг нужно!
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;