Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > FAQ

FAQ Туториалы и часто задаваемые вопросы

Ответ
 
Опции темы
Старый 13.01.2009, 16:05   #16
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Ответ: Математика в Blitz3D

по-моему все это обходят вычитанием и сравнением с требуемым уровнем точности
if x1:float - x2:float < 0.00000001 then equals.
__________________
(Offline)
 
Ответить с цитированием
Старый 13.01.2009, 16:08   #17
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Математика в Blitz3D

if x1:float - x2:float < 0.00000001 then equals.
if fABS(x1:float - x2:float) < 0.00000001 then equals.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 13.01.2009, 16:39   #18
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Ответ: Математика в Blitz3D

Да
А говорить, что "не сравнивайте числа с плавающей запятой" - это жестоко.
(Offline)
 
Ответить с цитированием
Старый 13.01.2009, 17:39   #19
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Сообщение от JohnK Посмотреть сообщение
Да
А говорить, что "не сравнивайте числа с плавающей запятой" - это жестоко.
Почитай посты повнимательнее, "не сравнивайте на равенство числа с плавающей запятой". Другими словами не юзаем оператор "равно", остальные юзать можно и нужно.

Сообщение от dimanche13 Посмотреть сообщение
по-моему все это обходят вычитанием и сравнением с требуемым уровнем точности
if x1:float - x2:float < 0.00000001 then equals.
К сожалению это может несработать, т.к. точность float 7 знаков, а не 8 или 9 как у вас... К тому же в зависимости от числа символов целой части дробная часть может сжиматься вплоть до 0 знаков

Иначе говоря на равенство сравнивать float нельзя никаким способом. Т.к. любой описанный вами способ с разной степенью вероятности будет врать.
__________________
(Offline)
 
Ответить с цитированием
Старый 28.01.2013, 13:49   #20
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Математика в Blitz3D

Зарождая новый срач возвращаясь к проблеме. Да: float - тот ещё подарочек. Но Blitz, к прочему, выводит его в потоки (в файл или на экран) обрезано. Выполним вот такой вот код:
Local x#=14.143+0.000001
DebugLog "In Blitz3D my float printed as "+Str(x)
For L=1 To 20
	DebugLog GetMyFloat(x,L)
Next
WaitKey()
End
И в лог отладчика мы получим следующее:
In Blitz3D my float printed as 14.143
Ну это-то ожидаемо. Флоат же - ерунда.
На самом деле: и флоата хватает и блитц всё посчитал правильно - далее в логе читаем:
14.1
14.14
14.143
14.1430
14.14300
14.143001
14.1430006
14.14300060
14.143000603
14.1430006027
14.14300060272
14.143000602722
14.1430006027222
14.14300060272217
14.143000602722168
14.1430006027221680
14.14300060272216797
14.143000602722167969
14.1430006027221679688
14.14300060272216796875
Спасибо, Марк, за фиксированную низкую точность вывода! А это значит, что float(str(x)) - непоправимая потеря точности.
Арифметические результаты не отличаются от аналогичных в MinGW (включая мусор на младших разрядах при излишней точности).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 28.01.2013, 13:57   #21
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Математика в Blitz3D

Ах - забыл уточнить: GetMyFloat - самописная функция, которую б3д берёт из DLL-ки.

#include <stdio.h>
snprintf(MyGlobalString,sizeof(MyGlobalString),"%.*f",L,x);
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?

Последний раз редактировалось impersonalis, 28.01.2013 в 18:10.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Истинная математика alcoSHoLiK Юмор 5 21.06.2007 14:49
Вычислительная математика: Аппроксимация КУБА Horror Болтовня 1 27.05.2007 18:14
Угол поворота модели(математика) <Платон> 3D-программирование 1 10.02.2006 18:55


Часовой пояс GMT +4, время: 15:05.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com