Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.12;
Скачать: CL | DM;

Вниз

Дробные числа   Найти похожие ветки 

 
default ©   (2003-06-01 20:46) [0]

Мастера срочно нужна помощь!

var
h, R: Real;
begin

h := 0.01;
R := 0.5;
repeat
WriteLn(R);
R := R + h;
until R > 1;
readLn

end.

// это лишь пример...

R = 1 в данном случае не выведется, знаю
что это связанно с внутренним представлением
дробных чисел, но как лечить? нужно СРОЧНО, поэтому
отсылать меня к литературе не надо


 
jack128 ©   (2003-06-01 21:19) [1]

сравнить переменную К с константой M
if Round(K*1000000) = M*1000000 then // K = M

тут возможны проблемы с переполнением, все таки Round(x) - это Int64, a x - Extended


 
default ©   (2003-06-01 22:20) [2]

jack128 ©
можно StrToFloat(FloatToStr(X))


 
Юрий Зотов ©   (2003-06-01 22:46) [3]

...
R := R + h;
if Abs(R - 1) < h then R := 1;
...


 
default ©   (2003-06-01 23:15) [4]

Юрий Зотов © (01.06.03 22:46)
а не Abs(R - 1) > h ?
единица была для примера
пусть вместо единицы будет n
тогда для некоторого n и начального значения R код с Вашей вставкой зацикливается(


 
default ©   (2003-06-01 23:18) [5]

Юрий Зотов © (01.06.03 22:46)
"тогда для некоторого n и начального значения R код с Вашей вставкой зацикливается("
это понятно из-за чего...
и со вставкой тоже...
но какой тогда сто процентный выход(



 
default ©   (2003-06-01 23:27) [6]

repeat
x0 := x0 + h;
if Abs(x0 - xmax) < 1E-11 then x0 := xmax;
until x0 > xmax

вот так наверно оставить!?


 
Юрий Зотов ©   (2003-06-02 00:17) [7]

1. Это был всего лишь пример коррекции, подсказка. Не стоит рассматривать его, как конкретный код, он всегда зависит от задачи.

2. Можно оставить и так, но в подобных случаях лучше использовать не константы типа 1E-11, а такие вещи, как машинный ноль и машинное эпсилон. Прочитайте на Королевстве в разделе Hello, World статью Антона Григорьева о вещественных числах - много полезного.


 
default ©   (2003-06-02 00:37) [8]

Юрий Зотов © (02.06.03 00:17)
про статью знаю просто пока времени нет
но всё равно спасибо


 
KSergey ©   (2003-06-02 08:16) [9]

> default © (02.06.03 00:37)

А постить куучу сообщений и читать их да еще экспериментировать - веремя есть?!!!! А может быстрее было бы статью читнуть?


 
Sandman25 ©   (2003-06-02 10:29) [10]

for i := 0 to 50 do
writeln(0.5+0.01*i);


 
Anatoly Podgoretsky ©   (2003-06-02 10:35) [11]

А что меняет?
Float на то и Float, что большинство чисел в нем невозможно представить точно, только приблизительно, 0.01 одно из таких чисел, переход на большую точность сути не меняет.


 
Sandman25 ©   (2003-06-02 10:51) [12]

>А что меняет?

Если вопрос был ко мне, то теперь не нужно заботиться о том, когда выходить из цикла (все эти сравнения с машинным нулем и т.д.). Хотя, конечно, выход может осуществиться слишком рано или слишком поздно. Но и тут все зависит от постановки задачи - в чем смысл цикла.


 
default ©   (2003-06-02 15:46) [13]

KSergey © (02.06.03 08:16)
не быстрее
тем более при изучении устр-ва дробных чисел
я бы ОБЯЗАТЕЛЬНО стал изучать программирование сопроцессора на ассемблере
может потом и статья будет не нужна) и так скорее всего всё будет очевидно
а на это нужно время



Страницы: 1 вся ветка

Текущий архив: 2003.06.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
3-34715
maxol67
2003-05-23 10:28
2003.06.12
Mouse Scroll в DBGrid


14-35063
Artefact OR
2003-05-28 09:13
2003.06.12
Supreme 2 нашёл девушку!


8-34946
Net_Prosto
2003-03-01 13:43
2003.06.12
GLScene


14-35052
_0$a_
2003-05-24 00:13
2003.06.12
Народ помогите Как найти Обратную матрицу


3-34666
mao
2003-05-18 07:59
2003.06.12
А всегда нужен BDE?