Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-34859
KpeHgeJIb
2003-05-31 01:48
2003.06.12
Как создать модальное сообщение?


14-35053
Till
2003-05-23 08:21
2003.06.12
MainMenu как в Офисе ХР


3-34680
Andy Eremin
2003-05-20 07:48
2003.06.12
Базы данных


1-34924
Lazy girl
2003-05-31 09:01
2003.06.12
Пропали системные кнопки MDI-child!!!!!!!!!!!!!!!!!


1-34923
Артем К
2003-06-02 10:26
2003.06.12
Как вывести все гласные буквы в Memo красным цветом?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский