![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
Ладно, Вам виднее. Только придётся придумывать, как бороться вот с этим:
Код:
Код:
|
![]() |
![]() |
![]() |
#12 |
Участник клуба
Регистрация: 26.10.2007
Сообщений: 1,244
|
![]() Код:
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым, Попытка глубже понимать уже попахивает литром... |
![]() |
![]() |
![]() |
#13 |
Участник клуба
Регистрация: 02.09.2007
Сообщений: 1,193
|
![]()
У меня такого эффекта нет, все значения 3.33333333333333E-0001
Delphi Enterprise v.7.0 (Build 8.1), Windows XP SP2 |
![]() |
![]() |
![]() |
#14 | |
Участник клуба
Регистрация: 26.10.2007
Сообщений: 1,244
|
![]() Цитата:
Выводил в цикле и делал проверку... 10000 значений и все равны.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым, Попытка глубже понимать уже попахивает литром... |
|
![]() |
![]() |
![]() |
#15 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
Да нет, это не реал врёт, а точности не хватает + издержки вывода VP, может быть. MS C++ выводит вот так:
Код:
Код:
Код:
------------------------------------ Добавлено: ------------------------------------ Сначала извиняюсь за неточность, запамятовал, что тип real и паскале - шестибайтовый. Точность вещественных чисел выбирают не наобум и не по тому, нравится ли нам, как они представлены в памяти, а по вполне простому критерию: нужно определить, в каком диапазоне будут изменяться величины и какая точность нас интересует в крайних положениях. Например, поставим задачу: иметь шесть точных разрядов при возможных изменениях в пределах двенадцати порядков - для сохранения результатов нам необходимы 12+6=18 десятичных разрядов. Т.е.: x = 1.23456 y = 1.23456 * 1 000 000 = 1 234 560 z = 1.23456 / 1 000 000 = 0.000 001 234 56 x + y + z = 1 234 561,234 561 234 56 - 18 знаков, делим на log10(2), получаем 59.8 - double нас не устроит, а extended для работы достаточно. Любое число, имеющее в нормальной форме шесть значащих цифр будет иметь также шесть верных значащих цифр (возможно с округлением перед выводом) после операций, результаты которых не выходят из допустимой области по порядку величины. Проверим это для нескольких типов вещественных чисел: Код:
Код:
real: (39 бит) Код:
double (52 разряда): Код:
extended (63 разряда): Код:
Последний раз редактировалось B_N; 10.03.2008 в 02:53. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как сложить два числа с плавающей точкой | forsy | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 19 | 29.03.2010 02:15 |
Преобразование числа в строку | )Игнат( | Общие вопросы Delphi | 6 | 06.07.2008 09:32 |
Сравнение чисел с плавающей точкой ? | Ulex | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 11 | 12.04.2008 21:14 |
Числа с плавающей точкой | Blondinka | Общие вопросы Delphi | 8 | 21.09.2007 11:32 |