purebasic.info

PureBasic forum
Текущее время: Пт окт 19, 2018 2:28 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Зачем-то функция Round имеет тип Float
СообщениеДобавлено: Пн июн 06, 2016 11:35 am 
Не в сети
док

Зарегистрирован: Пн авг 23, 2010 12:25 am
Сообщений: 113
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Пункты репутации: 0
Функция, возвращающая целые числа, имеет тип дробного числа.
В общем, арифметикой в РВ можно пользоваться, только, если она сильно проще элементарной математики:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
 
var.l  = 1420390861
diff.l = 50
 
res1.l = diff * Round(var / diff, #PB_Round_Nearest)
res2.f = diff * Round(var / diff, #PB_Round_Nearest)
res3.d = diff * Round(var / diff, #PB_Round_Nearest)
 
Debug res1  ; 1420390900
Debug res2  ; 1420390912.0
Debug res3  ; 1420390850.0
 



ps: похоже дело не в Round, если Round заменить на Int результат не изменится, ошибка а арифметике РВ.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 06, 2016 12:24 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1699
Откуда: Алматы
Благодарил (а): 15 раз.
Поблагодарили: 46 раз.
Пункты репутации: 5
коллега :) я тоже на этом вопросе немало попарился. мне умножение по моему надо было... так я сделал учет количество знаков после запятой, снос этих запятых, умножение как целого числа, потом восстановление запятой по количеству знаков. кажется так... или это про округление было? что-то кароче такое у меня было :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт июн 07, 2016 12:55 am 
Не в сети
док

Зарегистрирован: Пн авг 23, 2010 12:25 am
Сообщений: 113
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Пункты репутации: 0
SereZa писал(а):
сделал учет количество знаков после запятой, снос этих запятых, умножение как целого числа, потом восстановление запятой по количеству знаков.

Похоже, этот мичуринец, Фред задался целью сделать из пользователей РВ извращенцев. Странно, что ему еще лицо не побили.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт июн 07, 2016 8:42 am 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1699
Откуда: Алматы
Благодарил (а): 15 раз.
Поблагодарили: 46 раз.
Пункты репутации: 5
так вроде Пётр писал что такое везде во всех языках творится :) просто местами пользователям помогают, подстилая соломки, а местами - как Фред - нифига :) и вроде там кто-то упоминал про библиотеку какую-то специальную для подобных правильных исчислений.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 08, 2016 1:27 am 
Не в сети
док

Зарегистрирован: Пн авг 23, 2010 12:25 am
Сообщений: 113
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Пункты репутации: 0
SereZa писал(а):
такое везде во всех языках творится

ну не в арифметике же.
А тут как в анекдоте: в военное время значение числа пи может достигать четырех.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 08, 2016 10:17 am 
Не в сети
профессор

Зарегистрирован: Чт сен 22, 2011 6:21 pm
Сообщений: 257
Благодарил (а): 34 раз.
Поблагодарили: 25 раз.
Пункты репутации: 0
asdf8, А вы извините на чем писали до PB (где с арифметикой все прекрасно)?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 08, 2016 12:33 pm 
Не в сети
док

Зарегистрирован: Пн авг 23, 2010 12:25 am
Сообщений: 113
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Пункты репутации: 0
Kuzmat писал(а):
А вы извините на чем писали до PB (где с арифметикой все прекрасно)?

Спрашиваете так, будто знаете больше ЯП, чем я. Вполне допускаю, что это так. Сможите привести пример современного ЯП с ошибками арифметики?
Естественно с условием, что ошибками не являются такие случаи как:
переполнение для типов данных,
ошибка округления, при переводе дробей из десятичной системы в двоичную и обратно.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср июн 08, 2016 5:32 pm 
Не в сети
профессор

Зарегистрирован: Чт сен 22, 2011 6:21 pm
Сообщений: 257
Благодарил (а): 34 раз.
Поблагодарили: 25 раз.
Пункты репутации: 0
asdf8 писал(а):
...будто знаете больше ЯП, чем я. Вполне допускаю, что это так...

Нееет уважаемый, на слабо не получится :D
asdf8 писал(а):
...переполнение для типов данных, ошибка округления, при переводе дробей из десятичной системы в двоичную и обратно.

Ага, значит таки понимаете некоторые ограничения накладываемые представлением чисел в компьютере :lol:
откуда тогда такой праведный гнев в первом посте, на вполне закономерный результат?

зы. Хотите нормальную математику, используйте тип Double - и будет вам точность стандартного калькулятора,
а если надо больше - ищем специализированную библиотеку (ссылку не дам, надобности не было, не заморачивался, но на буржуйском форуме встречал, где не помню)
зызы. остальные числовые типы, придуманы для специальных целей, они банально быстрее работают, но имеют вполне закономерные ограничения.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 09, 2016 2:39 am 
Не в сети
док

Зарегистрирован: Пн авг 23, 2010 12:25 am
Сообщений: 113
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Пункты репутации: 0
Kuzmat писал(а):
Ага, значит таки понимаете некоторые ограничения накладываемые представлением чисел в компьютере

Посмотрите название топика. Насчет того, что использование в арифметике типа Float превращает арифметику в не пойми что, возражать, надеюсь не будете?
Kuzmat писал(а):
откуда тогда такой праведный гнев в первом посте, на вполне закономерный результат?

Да - погорячился, решил, что яп с названием basic должен быть несколько более дружелюбен к пользователю, чем, например, Си. Соответственно, это не ошибка компилятора - так и было задумано.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 09, 2016 6:46 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
вот ещё пища для ума
http://purebasic.info/phpBB3ex/viewtopic.php?f=1&t=3861

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 09, 2016 9:46 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11299
Благодарил (а): 4 раз.
Поблагодарили: 436 раз.
Зря ругаешь арифметику PB. Возьми обычный калькулятор (простой с 8 цифрами) и выполни следующие действия: 5 подели на 1.333, а затем умножь на 1.333. Если думаешь что результат будет 5, то ошибаешься. А PB эту задачу решает правильно.
Код:
1
2
3
4
5
x.d=5
y.d=1.333
x/y
x*y
Debug x


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 09, 2016 9:48 am 
Не в сети
профессор

Зарегистрирован: Чт сен 22, 2011 6:21 pm
Сообщений: 257
Благодарил (а): 34 раз.
Поблагодарили: 25 раз.
Пункты репутации: 0
asdf8 писал(а):
Посмотрите название топика. Насчет того, что использование в арифметике типа Float превращает арифметику в не пойми что, возражать, надеюсь не будете?
Float - сфера применения, векторная и 3D графика, других вариантов не встречал (именно там, много переменных, особая точность не требуется, критично время вычислений), использовать ее для чего-то другого - не совсем корректно (мягко говоря)
asdf8 писал(а):
...решил, что яп с названием basic должен быть несколько более дружелюбен к пользователю, чем, например, Си...
Басик был примитивен в первой реализации, ну возможно во второй...(но в те времена и прочие ЯП не особо блистали вроде как). В современных басиках от предка остался только "басик-подобный" синтаксис. Но тем не менее многие застревают на слове BASIC, почему так... :?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 09, 2016 11:51 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Пётр писал(а):
Зря ругаешь арифметику PB. Возьми обычный калькулятор (простой с 8 цифрами) и выполни следующие действия: 5 подели на 1.333, а затем умножь на 1.333. Если думаешь что результат будет 5, то ошибаешься. А PB эту задачу решает правильно.
Код:
1
2
3
4
5
x.d=5
y.d=1.333
x/y
x*y
Debug x


Опа, специально взял, 4,99..... получилось, там же можно было бы и поточнее, тем более в новых, почему лентяи не сделают. :D

Мне кажется что точность кругов имеет значение, не всем же надо мелкие чертить, ну раз делают, то значит не просто так. Как вариант, написать свой Roundasdf8(int)

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 09, 2016 1:11 pm 
Не в сети
док

Зарегистрирован: Пн авг 23, 2010 12:25 am
Сообщений: 113
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
Пункты репутации: 0
Пётр писал(а):
Зря ругаешь арифметику PB

Всю арифметику РВ я не ругаю. Все вполне конкретно:
Код:
1
2
3
4
5
6
7
8
9
10
 
var.l  = 50399943
diff.l = 3
resD.d = var / diff
 
resL.l = diff * resD
Debug resL ; 50399943
resL = diff * Round(var / diff, #PB_Round_Nearest)
Debug resL ; 50399940
 



Более того, мне нравится синтаксис РВ, потому им и пользуюсь. Но реализация отдельных моментов оставляет желать много лучшего.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт июн 10, 2016 2:48 pm 
Не в сети
док

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 168
Благодарил (а): 92 раз.
Поблагодарили: 5 раз.
Пункты репутации: 0
asdf8 - пишите Фрэду, пусть растолкует или пофиксит!


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB