Оберон-технология: особенности и перспективы |
Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение.
Всего в теме 6256 сообщений
Добавить свое сообщение
Отслеживать это обсуждение Обсуждение из раздела Школа ОБЕРОНА
№ 2296 24-01-2007 18:21 | |
Ответ на »сообщение 2293« (PGR)
___________________________
Ответ на »сообщение 2291« (AVC)
___________________________
Значит вычисление с более точным типом (long double) дает менее точный результат ... Все-таки 10/0.1=100
Был неправ. Вычисление с long double дает правильный ответ -- 100.
Просто константу 0.1 нужно задавать в виде 0.1L (типа long double), а не просто 0.1 (тип double).
#include <stdio.h>
#include <math.h>
int main()
Так, что проблема в блэкбоксовской ENTIER.
И еще вопрос -- почему в BlackBox нет типа LONGREAL ?
№ 2295 24-01-2007 17:11 | |
Ответ на »сообщение 2293« (PGR)
___________________________
Получается, что в BlackBox выполняется неявное преобразование "вещественных" типов.
Если процессор при пересылке из регистра в память по пути срубает с хвоста мантиссы пару байтов, то при чем тут ББ... В Интел надо письма писать.
А вообще-то смешно, конешно, работать с разрывной функцией вблизи точки разрыва -- никогда не знаешь, че вылезет 8))
А Вы тут, кстати, столкнулись с фактом, что в некотором конструктивно-интуиционистском смысле разрывные функции "не существуют".
Поэтому, кстати, раз программирование -- вещь конструктивная, и все должно быть интуитивно понятно, то Вирт и убрал ключевое слово FUNCTION, вместе с GOTO, для более глубокой научности. И теперь всюду одни PROCEDURE.
А мы тут, несмотря на все наше нешаблонное мышление, этот пункт-от ишшо не обсудили как следовает.
А пункт глубо-о-о-о-о-о-о-о-о-о-о-окий...
Ведь вот хоть насчет моделирования переходов между состояниями с помощью функций: одни говорят, мол, функций нет, другие, сообщают, состояния тоже, типа, так себе, убогая абстракция внутри головы...
И че тогда делать будем? 8)))))))))))))))))))))))))))))))))))))
№ 2294 24-01-2007 16:41 | |
Ответ на »сообщение 2292« (Сергей Осколков)
___________________________
Речь шла о том, что нам нужны переменные, потому что у моделируемого объекта есть меняющиеся характеристики, играющие существенную роль в нашей задаче. По моему мысль вполне простая и достаточно оче-видная.
Это очевидная мылсь для тех, у кого шаблонное мышление.
А Вы попробуйте раскрепоститца...
№ 2293 24-01-2007 15:09 | |
Ответ на »сообщение 2291« (AVC)
___________________________
Спасибо за объяснение.
Значит вычисление с более точным типом (long double) дает менее точный результат ... Все-таки 10/0.1=100
Всегда думал, что
x := expr;
y = f(x);
эквивалентно
y = f(expr);
Получается, что в BlackBox выполняется неявное преобразование "вещественных" типов.
№ 2292 24-01-2007 14:45 | |
Ответ на »сообщение 2266« (Владимир Лось)
___________________________
Ну вот опять! То, что вы в данном случае определяете как "состояние" - просто абстракция, заменяющая недостаток знания по конкретным процессам, происходящим внутри некоторой системы, производящей именно такой набор и конфигурацию "пиков" на спектре...
Ну, значит " конкретные процессы, происходящие внутри некоторой системы, производящей именно такой набор и конфигурацию "пиков" на спектре" вы признаете. ("Процесс" стало быть, приемлемая абстракция, не требующая определения, в отличие от "состояние" :D ). Осталось признать, что у этих процессов, у этой системы есть свойства, характеристики. О них изначально и шла речь.
Любое познание избирательно. В случае с ракетой мы имеем цель попасть в определенную точку, может быть еще сделать несколько маневров, пролететь по определенной траектории - я не специалист. Отсюда нам интересны те характеристики, которые существенны для достижения наших целей. Но то, что мы имеем абстрактную модель полета ракеты, которую (физическую модель) потом моделируем уже в программе, никак не опреовергает того факта, что у ракеты есть скорость, положение и т.п. Которые меняются со временем в зависимости от многих обстоятельств. И для адекватного моделирования нам нужен язык с переменными, значения которых могут меняться - о чем и шла речь в сообщении info21, c которого началось это обсуждение. Речь шла о том, что нам нужны переменные, потому что у моделируемого объекта есть меняющиеся характеристики, играющие существенную роль в нашей задаче. По моему мысль вполне простая и достаточно оче-видная.
№ 2291 24-01-2007 13:50 | |
Ответ на »сообщение 2288« (AVC)
___________________________
Отсюда следующее предположение.
Функция Math.Floor -- это обычная математическая функция с аргументом типа REAL (double).
ENTIER -- встроенная (predeclared) функция с аргументом любого типа с плавающей точкой (не хочу называть их "действительными" или "вещественными").
Скорее всего она напрямую обращается к сопроцессору, работающему в принципе с 10-байтовыми числами (long double).
И, видимо, именно для long double она возвращает 99.
Т.е. причина в том, что для в выражении ENTIER(10 / dt) его часть 10 / dt берется (наверное, для эффективности) как long double, т.е. прямо в том виде, в каком верну его сопроцессор.
То же самое могло случиться с Math.Floor, но Math.Floor -- "обычная" функция, ее аргумент предварительно приводится к 8-байтовому типу REAL и запихивается в стек.
Для ENTIER можно добиться аналогичного результата, если воспользоваться промежуточной переменной:
VAR x: REAL;
...
x := 10 / dt;
ENTIER(x) ---> 100
№ 2290 24-01-2007 13:20 | |
Ответ на »сообщение 2279« (Сергей Перовский)
___________________________
Заметим, очень эффективная абстракция :)
На данный момент.
Эпициклы тоже были достаточны и очень эффективны. Для своего времени.
Но я думаю мы, в отличие от ТЕХ "создателей моделей", прекрассно понимаем, что истины в последней инстанции нет. Понимаем, в том числе, и на примере тех "убеждённых эпицикшиков"... :о)
№ 2289 24-01-2007 13:14 | |
Ответ на »сообщение 2271« (Сергей Губанов)
___________________________
Ваши проблемы - физический термин "состояние" к Миру (и к компьютеру) применим.
Ну тогда (хотя бы "на пальцах") раскройте мне мне этот "физический" термин (применительно к Миру, а не к одной из его моделей)...
№ 2288 24-01-2007 12:42 | |
Ответ на »сообщение 2287« (PGR)
___________________________
Ответ на »сообщение 2284« (AVC)
___________________________
Допустим, что 10/dt не точно 100, а 99.99999999999...,
но тогда бы и Floor тоже вернул 99, а не 100
Информация для размышления.
У меня на Си (компилятор MinGW) printf в следующей программе
#include <stdio.h>
#include <math.h>
int main()
как раз печатает 99.
№ 2287 24-01-2007 12:32 | |
Ответ на »сообщение 2284« (AVC)
___________________________
Допустим, что 10/dt не точно 100, а 99.99999999999...,
но тогда бы и Floor тоже вернул 99, а не 100
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|