18:48
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: AXE, Weddew  
Qweqwe Магия или потеря 0.000001 в никуда!
AirKiteДата: Суббота, 06.11.2010, 13:14 | Сообщение # 1
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Всем привет, давно нечего такого не писал fun
Уже можно открывать целый раздел, посвящённый всяким странностям языка Pawn ну или по крайне мере той его урезке которая используется для SAMP :D

Так вот, кто тут у нас самый умный, объясните пожалуйста почему FloatFromIDfloat(1) - возвращает 0.014999.
А вот FloatFromIDfloat(2) - Все честные 0.135.

Code

Float:FloatFromIDfloat(id)
{
     if(id == 0) { return 0.0; }
     else if(id == 1) { return 0.015; }
     else if(id == 2) { return 0.135; }
     else if(id == 3) { return 2.500; }
     else if(id == 4) { return 4.000; }
     else if(id == 5) { return 3.000; }
     return 0.0;
}

Пример:

Code
if(strcmp(cmd, "/getfloatid", true) == 0)
     {
      new ofloatid = strval(strtok(cmdtext,idx));
      new string[128];
      format(string, sizeof(string),"*Float ID:%d, Float: %f.",ofloatid, FloatFromIDfloat(ofloatid));
      SendClientMessage(playerid, 0xAAAAAAAA, string);
      return 1;
     }

Добавлено (06.11.2010, 13:14)
---------------------------------------------
Не сломали головы? ;)
Совсем чуть глубже капнуть, то можно понять что FloatFromIDfloat(1) - выдаёт правильно 0.015. А вот %f формат делает странные искажения с небольшими числами Float :(

*ENTERED Float: 0.009999. - Real String: 0.01

*ENTERED Float: 0.019999. - Real String: 0.02

*ENTERED Float: 0.029999. - Real String: 0.03

*ENTERED Float: 0.039999. - Real String: 0.04

*ENTERED Float: 0.050000. - Real String: 0.05

*ENTERED Float: 0.010999. - Real String: 0.011

*ENTERED Float: 0.012000. - Real String: 0.012

*ENTERED Float: 0.013000. - Real String: 0.013

*ENTERED Float: 0.012000. - Real String: 0.012

*ENTERED Float: 0.013000. - Real String: 0.013

*ENTERED Float: 0.014000. - Real String: 0.014

*ENTERED Float: 0.014999. - Real String: 0.015

*ENTERED Float: 0.016000. - Real String: 0.016

*ENTERED Float: 0.017000. - Real String: 0.017

*ENTERED Float: 0.017999. - Real String: 0.018

*ENTERED Float: 0.018999. - Real String: 0.019

*ENTERED Float: 0.019999. - Real String: 0.020

*ENTERED Float: 0.020999. - Real String: 0.021

*ENTERED Float: 0.021999. - Real String: 0.022

*ENTERED Float: 0.023000. - Real String: 0.023

*ENTERED Float: 0.024000. - Real String: 0.024

Code
if(strcmp(cmd, "/showfloat", true) == 0)
  {
      cmd = strtok(cmdtext,idx);
   new Float:ofloatid = floatstr(cmd);
   new string[128];
   format(string, sizeof(string),"*ENTERED Float: %f. - Real String: %s",ofloatid, cmd);
   SendClientMessage(playerid, 0xAAAAAAAA, string);
   return 1;
  }



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record


Сообщение отредактировал AirKite - Суббота, 06.11.2010, 13:16
MaccerДата: Суббота, 06.11.2010, 16:44 | Сообщение # 2
Уверенный в себе
Группа: Продвинутые
Сообщений: 281
Награды: 7
Город: Санкт-Петербург
Репутация: 100
Замечания: 40%
Статус:
вики

http://softelectro.ru/ieee754.html

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


есть вопросы по sa-mp или pawn?
помогу за $$


Сообщение отредактировал Maccer - Суббота, 06.11.2010, 16:46
stepmexДата: Суббота, 06.11.2010, 17:03 | Сообщение # 3
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
Quote
format(string, sizeof(string),"*Float ID:%d, Float: %.3f.",ofloatid, FloatFromIDfloat(ofloatid));
указывай порядок при выводе.



И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
AirKiteДата: Суббота, 06.11.2010, 19:24 | Сообщение # 4
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Quote (stepmex)
указывай порядок при выводе.

Ну так у меня и так изначально на %.3f была )) я просто её убрал чтобы было видно что не 0.014 а 0.0149999 :D

Добавлено (06.11.2010, 19:24)
---------------------------------------------
Maccer, спасибо... но стоит обратить внимание на:

Code

*ENTERED Float: 0.009999. - Real String: 0.01  

*ENTERED Float: 0.019999. - Real String: 0.02  

*ENTERED Float: 0.029999. - Real String: 0.03  

*ENTERED Float: 0.039999. - Real String: 0.04  

*ENTERED Float: 0.050000. - Real String: 0.05  

*ENTERED Float: 0.010999. - Real String: 0.011  

*ENTERED Float: 0.012000. - Real String: 0.012  

*ENTERED Float: 0.013000. - Real String: 0.013  

*ENTERED Float: 0.012000. - Real String: 0.012  

*ENTERED Float: 0.013000. - Real String: 0.013  

*ENTERED Float: 0.014000. - Real String: 0.014  

*ENTERED Float: 0.014999. - Real String: 0.015  

*ENTERED Float: 0.016000. - Real String: 0.016  

*ENTERED Float: 0.017000. - Real String: 0.017  

*ENTERED Float: 0.017999. - Real String: 0.018  

*ENTERED Float: 0.018999. - Real String: 0.019  

*ENTERED Float: 0.019999. - Real String: 0.020  

*ENTERED Float: 0.020999. - Real String: 0.021  

*ENTERED Float: 0.021999. - Real String: 0.022  

*ENTERED Float: 0.023000. - Real String: 0.023  

*ENTERED Float: 0.024000. - Real String: 0.024



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record
stepmexДата: Суббота, 06.11.2010, 19:28 | Сообщение # 5
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
Quote (AirKite)
Maccer, спасибо... но стоит обратить внимание на:
так и должно быть.



И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
DiSEДата: Суббота, 06.11.2010, 19:30 | Сообщение # 6
Группа: I'm V.I.P.
Сообщений: 1759
Награды: 23
Город: Уфа
Репутация: 337
Замечания: 80%
Статус:
А для чего это вообще, что с ним сделать можно?
AirKiteДата: Суббота, 06.11.2010, 19:44 | Сообщение # 7
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Quote (stepmex)
так и должно быть.

Требуется объяснение а не "Да!!! Всё верно!" :)
Я и сам прекрасно понимаю ;) Хотя для меня это не нормально и какое отношение это имеет к плавающей точке\запятой? crazy

Quote (EnErGiZeR)
А для чего это вообще, что с ним сделать можно?

Не суть для чего это... это то с чем сталкивается каждый кому нужны выводить в чат мелкие Float числа :)
Которые просто искажаются через %f sick



[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record
stepmexДата: Суббота, 06.11.2010, 20:27 | Сообщение # 8
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
Тебе же дали ссылки, попробуй почитать что там пишуть.
В крастце: компютеры могут оперировать только целыми числами, и числа с плавающей запятой лишь имитация, а то что 0.0015 представляется как 0.0149999(9) это какраз результат этой самой имитации.
Все числа с плавающей запятой представлены в компьютере как округление до целого, а внутри храниться как максимально приближенное значение, с макимально доступным порядком посе запятой.



И создал Бог женщину!.. Существо получилось злобное, но симпатичное...

Сообщение отредактировал stepmex - Суббота, 06.11.2010, 20:28
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua