Выражение (1000.013-1000.007) почему то равно 0.00600000000008549?
code_1359.txt
Этот топик читают: Гость
Ответов: 1397
Рейтинг: 50
|
|||
карма: 0 |
| ||
файлы: 1 | code_1359.txt [537B] [184] |
Ответов: 9906
Рейтинг: 351
|
|||
И в чем вопрос
|
|||
карма: 9 |
|
Ответов: 1397
Рейтинг: 50
|
|||
В том, что данное выражение равно 0.00600000000000000!
|
|||
карма: 0 |
|
Ответов: 5446
Рейтинг: 323
|
|||
Валерий, машинная арифметика в дробных числах не является точной по определению.
|
|||
карма: 1 |
|
Ответов: 1397
Рейтинг: 50
|
|||
Никогда не думал, что настолько
|
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Насколько
Пока я вижу неточность (относительную) в 15-м знаке |
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Для real, которые используются в HiAsm - так и должно быть. Использование типа с большей точностью на данный момент, по-моему, проблематично, т.к. надо внести довольно много изменений, в т.ч. и в среду.
|
|||
карма: 1 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Большая точность - это 80-бит (в Дельфях - extended)
Команды проца заточены под это ЗНАЧИТЕЛЬНО меньше, чем под 64 Вопрос - нафига козе боян. Собственно, жизнь говорит, что когда не хватает float (32-бита) - это кривые вычислительные алгоритмы. За 99% случаев - ручаюсь. Если иметь ввиду "живые" задачи, а не буйные фантазии. |
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Galkov писал(а): Команды проца заточены под это ЗНАЧИТЕЛЬНО меньшеАрифметика проца - 80-бит, а вот сохранять и загружать числа ты можешь практически как угодно (в формате 32,64,80-бит) |
|||
карма: 1 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Да, и для 80 бит - команд на ЭТО требуется больше.
Я же не говорю, что вообще не заточен: МЕНЬШЕ заточен |
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Galkov писал(а): для 80 бит - команд на ЭТО требуется большеНе понял, какая разница между
|
|||
карма: 1 |
|
Ответов: 1397
Рейтинг: 50
|
|||
Galkov писал(а): Насколько
Пока я вижу неточность (относительную) в 15-м знаке Меня больше смутило наличие чисел вместо нулей. Вобщем пришлось отрезать ненужную часть. |
|||
карма: 0 |
|
Ответов: 9906
Рейтинг: 351
|
|||
tsdima, а разницу между
|
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Ладно, уговорил. Ну будет во втором случае fld faddp, с учётом конвейерной обработки на один такт больше А то и вовсе одинаково, к моменту, когда tword загрузится, faddp уже пару тактов ждать будет
|
|||
карма: 1 |
|
Ответов: 9906
Рейтинг: 351
|
|||
Ну чего ты веришь-то сладким сказкам...
1) Начнем с того, что это не риск, и про один такт - это сказки. Которые может и сбываются, но не всегда, и не везде, и не по любому поводу 2) Во вторых, это вместо 100 байт кода на формулу, уже будет 150. Сказок, что именно этот код и именно твоего приложения попал в кэш - не надо рассказывать. 3) Но самое главное: нет ни одной причины, чтобы я даже начал разбираться в этом. Кто дружит с арифметикой - тому и 32-х бит хватит (в тех самых 99% случаев). А кто не дружит - того и Extended не спасет. Обрати внимание на пример из топика: просто накопленная ошибка будет в 128 раз меньше, но вовсе не нулевая. 4) При этом, проводя вычисления в FPU (extended), и сохраняя как real, мы проводим округления, сбрасывая таки в 0 в большинстве случаев, накопленную ошибку. Обрати внимание: здесь в результате чистый нулик таки.
|
|||
карма: 9 |
|
15