Автор | Сообщение |
|
| |
Пост N: 166
Зарегистрирован: 12.11.06
|
|
Отправлено: 07.11.10 10:24. Заголовок: Волшебные числа и операции
Доброе утро! Вот наткнулся на очередную ошибку xHarbour и Clipper. Думал, что глюк ОС или ПК, но нет. Пример ошибки - оператор "остаток от деления": 8.8 * 3 = 26.4 или 3.3 * 3 = 9.9, но операции (%) дают 26.4%8.8 = 8.8 или (НО правильно) 9.9%3.3 = 0 Вопрос - как Вы обходите данные глюки? Или где в "арифметике" ожидать очередных "засад"? До кучи напомню об ошибочной работе функции Int в Clipper (в xHarbour кажется работает правильно)
|
|
|
Ответов - 150
, стр:
1
2
3
4
5
6
7
8
All
[только новые]
|
|
|
| |
Пост N: 2474
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.07.12 16:39. Заголовок: AndreyZh Держи http..
|
|
|
|
| |
Пост N: 269
Зарегистрирован: 12.11.06
|
|
Отправлено: 27.07.12 16:49. Заголовок: Dima пишет: Держи h..
Dima пишет: Спасибо - скачал
|
|
|
|
| |
Пост N: 562
Зарегистрирован: 11.06.10
|
|
Отправлено: 27.07.12 18:16. Заголовок: AndreyZh пишет: А В..
AndreyZh пишет: цитата: | А Вы уважаемый! - не передёргивайте... Например Lazarus, впрочем и другие популярные системы разработок (PHP, C++, ...) имеет большой набор литературы, да если поискать на сайтах разработчиков библиотек Harbour то же многое можно накопать! |
|
Спокойно! Вот видите Вы уже многое и накопали! Так что там про старт Вас интересует?
|
|
|
|
| |
Пост N: 270
Зарегистрирован: 12.11.06
|
|
Отправлено: 30.07.12 09:16. Заголовок: AlexMyr пишет: Так ..
AlexMyr пишет: цитата: | Так что там про старт Вас интересует? |
| Доброе утро! Не ответить - наверное неприлично, хотя уже мало интересно... А для пользы, если есть на русском яыке интересно бы было изучить: 1. Harbour 3. Сборка программы, работа с hbmk 2. Список функций и пример для начинающего по LetoDB 3.... По остальному... Надо посмотреть руквоводство любезно данное Dima.
|
|
|
|
| |
Пост N: 563
Зарегистрирован: 11.06.10
|
|
Отправлено: 30.07.12 09:38. Заголовок: AndreyZh пишет: 1. ..
AndreyZh пишет: цитата: | 1. Harbour 3. Сборка программы, работа с hbmk |
| Для начала hbmk2 -help Допустим у вас проект из двух файлов p1.prg, p2.prg, создадим pr1.hbp //begin pr1.hbp p1 p2 //end pr1.hbp Собираем: hbmk2 pr1.hbp Если нужно дополнительно подключить библиотеку, тогда //begin pr1.hbp -l<namelib1> -l<namelib2> p1 p2 //end pr1.hbp Больше примеров на SVN\contrib AndreyZh пишет: цитата: | 2. Список функций и пример для начинающего по LetoDB |
| Изучаем readme.txt и readme_rus.txt, примеры в в letodb/tests
|
|
|
|
| |
Пост N: 6282
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.02.17 18:34. Заголовок: Вроде не было в этой..
Вроде не было в этой теме set fixed on SET DECIMALS TO 15 ? 33724.30+6120.30 // 39844.600000000010000 Откуда взялась 1 в 11 знаке после запятой ? Ведь не множим , не делим...
|
|
|
|
| |
Пост N: 335
Зарегистрирован: 12.11.06
|
|
Отправлено: 11.02.17 07:23. Заголовок: Что по этому примеру..
|
|
|
|
| |
Пост N: 336
Зарегистрирован: 12.11.06
|
|
Отправлено: 11.02.17 07:33. Заголовок: Вдогонку... на VFP 9..
Вдогонку... на VFP 9 так же сложение даёт хвост, но Int там работает, на этом примере правильно
|
|
|
|
| постоянный участник
|
Пост N: 1420
Зарегистрирован: 09.10.06
|
|
Отправлено: 11.02.17 11:45. Заголовок: AndreyZh пишет: ост..
AndreyZh пишет: цитата: | осталось проверить "прародителя" - проверить это на чистом С |
| Так вроде ж прародитель Clipper bcc55 цитата: | #include <stdio.h> int main () { double a = 33724.30; double b = 6120.30; printf( "result = %.15f\n", a + b ); printf( "result = %.15f\n", a - b ); return( 0 ); } |
| Вывод цитата: | result = 39844.600000000005820 result = 27604.000000000003640 |
| PellesC 8.0 цитата: | result = 39844.600000000005821 result = 27604.000000000003638 |
|
|
|
|
|
| |
Пост N: 6283
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.02.17 14:42. Заголовок: AndreyZh пишет: но ..
AndreyZh пишет: цитата: | но Int там работает, на этом примере правильно |
| А что покажет Foxpro на такой пример ? local n := (3.14 ^ 3.14 ^ 3.14 ^ 3.14) / 0.002 ? n ? int(n) Harbour 1211955117675862000.00 1211955117675862528
|
|
|
|
| |
Пост N: 337
Зарегистрирован: 12.11.06
|
|
Отправлено: 11.02.17 16:46. Заголовок: Просто есть fox под ..
Просто есть fox под руками - вот и проверил. Win 10/64
|
|
|
|
|
| постоянный участник
|
Пост N: 1421
Зарегистрирован: 09.10.06
|
|
Отправлено: 11.02.17 17:45. Заголовок: PROCEDURE main() L..
цитата: | PROCEDURE main() LOCAL n := (3.14 ^ 3.14 ^ 3.14 ^ 3.14) / 0.002 ? n ? Int( n ) SET FIXED ON SET DECIMALS TO 15 ? 33724.30+6120.30 // 39844.600000000010000 RETURN C:\ALASKA\XPPW32\bin>pbuild.bat test_f.prg Xbase++ (R) Compiler 1.90.331 Apr 27 2006 Copyright (c) Alaska Software. All rights reserved. File: C:\ALASKA\XPPW32\bin\test_f.prg Line: 13 File C:\ALASKA\XPPW32\bin\test_f.prg successfully compiled. Alaska 32-Bit Linker Version 1.90.331 Copyright (c) Alaska Software 1997-2006. All rights reserved. 1211955117675862000,00 1211955117675862000 39844,600000000010000 |
|
|
|
|
|
| |
Пост N: 6285
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.02.17 18:26. Заголовок: Петр пишет: 39844,..
Петр пишет: А Excel считает без "хвоста"
|
|
|
|
| постоянный участник
|
Пост N: 1422
Зарегистрирован: 09.10.06
|
|
Отправлено: 11.02.17 18:48. Заголовок: У всех свои правила ..
У всех свои правила - вот знать бы их Но harbour, xharbour, xbase++ и, думаю, clipper пользуются одним и тем же правилом.
|
|
|
|
| |
Пост N: 6286
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.02.17 19:05. Заголовок: Петр Да в Clipper т..
Петр Да в Clipper такой же результат (проверил)
|
|
|
|
| Администратор
|
Пост N: 3527
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.02.17 20:23. Заголовок: Петр пишет: У всех ..
Петр пишет: цитата: | У всех свои правила - вот знать бы их Но harbour, xharbour, xbase++ и, думаю, clipper пользуются одним и тем же правилом. |
| Все эти операции выполняет одно и то же устройство - FPU, и думается, выполняет одинаково. Не забывайте, что числа хранятся в двоичном представлении, то есть с базой 2. Отображаются они в привычном для нас десятичном формате. Для преобразования числа в строковое представление с базой 10 необходимо выполнить массу арифметических операций: в основном это операции вычитания и умножения или деления на 10. Эти операции во-первых могут выполняться по разному и в разной последовательности, во вторых каждая такая операция тоже дает некоторую погрешность, обычную для операций fpu. Отсюда получается различный результат для разных компиляторов и программных комплексов.
|
|
|
|
| Администратор
|
Пост N: 4026
Зарегистрирован: 23.05.05
|
|
Отправлено: 15.06.21 08:40. Заголовок: Вот сам нарвался на ..
Вот сам нарвался на ситуацию: Есть простое суммирование поля с размерностью N, 12, 2. Суммируется около 2 тыс значений В итоге получается результат: 6947703.00000001 Набегает погрешность 10 нанорублей, или 1 микрокопейка Я бы и не заметил такую погрешность, но результат передается в Excel, а там в строке ввода погрешность видно. Пользователи нервничают, ну как обычно
|
|
|
|
| |
Пост N: 329
Зарегистрирован: 05.11.05
|
|
Отправлено: 15.06.21 11:16. Заголовок: Pasha пишет: В итог..
Pasha пишет: цитата: | В итоге получается результат: 6947703.00000001 Набегает погрешность 10 нанорублей, или 1 микрокопейка |
| Я еще когда на клиппере писал, стал в таких случаях писать округление до копейки для каждого числа, которые после округления суммировал. По логике это округление не нужно, но приходилось, чтобы таких ошибок не было.
|
|
|
|
| |
Пост N: 7395
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.06.21 12:38. Заголовок: Pasha пишет: Есть п..
Pasha пишет: цитата: | Есть простое суммирование поля с размерностью N, 12, 2. Суммируется около 2 тыс значений |
| Тут вопрос возникает. Округлять результат операции суммирования для всех 2 тыс значений или только конечную цифру ?
|
|
|
|
| Администратор
|
Пост N: 4027
Зарегистрирован: 23.05.05
|
|
Отправлено: 15.06.21 12:58. Заголовок: Достаточно конечную ..
Достаточно конечную цифру, я так и делаю
|
|
|
Ответов - 150
, стр:
1
2
3
4
5
6
7
8
All
[только новые]
|
|