On-line: Andrey, гостей 0. Всего: 1 [подробнее..]
АвторСообщение





Пост 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 кажется работает правильно)

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 150 , стр: 1 2 3 4 5 6 7 8 All [только новые]


администратор




Пост N: 2474
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.07.12 16:39. Заголовок: AndreyZh Держи http..


AndreyZh
Держи http://files.mail.ru/RSTCM6

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 269
Зарегистрирован: 12.11.06
ссылка на сообщение  Отправлено: 27.07.12 16:49. Заголовок: Dima пишет: Держи h..


Dima пишет:

 цитата:
Держи http://files.mail.ru/RSTCM6

Спасибо - скачал

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 562
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 27.07.12 18:16. Заголовок: AndreyZh пишет: А В..


AndreyZh пишет:

 цитата:
А Вы уважаемый! - не передёргивайте... Например Lazarus, впрочем и другие популярные системы разработок (PHP, C++, ...) имеет большой набор литературы, да если поискать на сайтах разработчиков библиотек Harbour то же многое можно накопать!

Спокойно! Вот видите Вы уже многое и накопали! Так что там про старт Вас интересует?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 270
Зарегистрирован: 12.11.06
ссылка на сообщение  Отправлено: 30.07.12 09:16. Заголовок: AlexMyr пишет: Так ..


AlexMyr пишет:

 цитата:
Так что там про старт Вас интересует?


Доброе утро! Не ответить - наверное неприлично, хотя уже мало интересно... А для пользы, если есть на русском яыке интересно бы было изучить:

1. Harbour 3. Сборка программы, работа с hbmk
2. Список функций и пример для начинающего по LetoDB
3.... По остальному... Надо посмотреть руквоводство любезно данное Dima.

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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 знаке после запятой ?
Ведь не множим , не делим...

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 335
Зарегистрирован: 12.11.06
ссылка на сообщение  Отправлено: 11.02.17 07:23. Заголовок: Что по этому примеру..


Что по этому примеру, что http://clipper.borda.ru/?1-4-0-00001174-000-0-0-1486729322 на xHarbour при использовании любых функция преобразования чисел к строке получается идентичные результаты... осталось проверить "прародителя" - проверить это на чистом С

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 336
Зарегистрирован: 12.11.06
ссылка на сообщение  Отправлено: 11.02.17 07:33. Заголовок: Вдогонку... на VFP 9..


Вдогонку... на VFP 9 так же сложение даёт хвост, но Int там работает, на этом примере правильно



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 337
Зарегистрирован: 12.11.06
ссылка на сообщение  Отправлено: 11.02.17 16:46. Заголовок: Просто есть fox под ..


Просто есть fox под руками - вот и проверил. Win 10/64



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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




Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6285
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.17 18:26. Заголовок: Петр пишет: 39844,..


Петр пишет:

 цитата:
39844,600000000010000


А Excel считает без "хвоста"

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1422
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 11.02.17 18:48. Заголовок: У всех свои правила ..


У всех свои правила - вот знать бы их

Но harbour, xharbour, xbase++ и, думаю, clipper пользуются одним и тем же правилом.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6286
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.02.17 19:05. Заголовок: Петр Да в Clipper т..


Петр
Да в Clipper такой же результат (проверил)

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3527
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.02.17 20:23. Заголовок: Петр пишет: У всех ..


Петр пишет:

 цитата:
У всех свои правила - вот знать бы их

Но harbour, xharbour, xbase++ и, думаю, clipper пользуются одним и тем же правилом.



Все эти операции выполняет одно и то же устройство - FPU, и думается, выполняет одинаково.
Не забывайте, что числа хранятся в двоичном представлении, то есть с базой 2. Отображаются они в привычном для нас десятичном формате.
Для преобразования числа в строковое представление с базой 10 необходимо выполнить массу арифметических операций: в основном это операции вычитания и умножения или деления на 10.
Эти операции во-первых могут выполняться по разному и в разной последовательности, во вторых каждая такая операция тоже дает некоторую погрешность, обычную для операций fpu.
Отсюда получается различный результат для разных компиляторов и программных комплексов.


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4026
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.06.21 08:40. Заголовок: Вот сам нарвался на ..


Вот сам нарвался на ситуацию:

Есть простое суммирование поля с размерностью N, 12, 2. Суммируется около 2 тыс значений

В итоге получается результат: 6947703.00000001
Набегает погрешность 10 нанорублей, или 1 микрокопейка
Я бы и не заметил такую погрешность, но результат передается в Excel, а там в строке ввода погрешность видно.
Пользователи нервничают, ну как обычно

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 329
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 15.06.21 11:16. Заголовок: Pasha пишет: В итог..


Pasha пишет:

 цитата:
В итоге получается результат: 6947703.00000001
Набегает погрешность 10 нанорублей, или 1 микрокопейка



Я еще когда на клиппере писал, стал в таких случаях писать округление до копейки для каждого числа, которые после округления суммировал. По логике это округление не нужно, но приходилось, чтобы таких ошибок не было.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7395
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.06.21 12:38. Заголовок: Pasha пишет: Есть п..


Pasha пишет:

 цитата:
Есть простое суммирование поля с размерностью N, 12, 2. Суммируется около 2 тыс значений


Тут вопрос возникает.
Округлять результат операции суммирования для всех 2 тыс значений или только конечную цифру ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4027
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.06.21 12:58. Заголовок: Достаточно конечную ..


Достаточно конечную цифру, я так и делаю

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 150 , стр: 1 2 3 4 5 6 7 8 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 700
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет