powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / float что за чудеса?
12 сообщений из 12, страница 1 из 1
float что за чудеса?
    #38262356
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, решил немного посчитать вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#include <stdio.h>
bool is_clear_bit(const float koef,unsigned idx)
{
    bool result = false;
    if(koef<=1)
    {
        float map_to_node = koef * float(idx);
        unsigned source = (unsigned)map_to_node;
        float map_to_node_next = map_to_node+koef;
        result = source >= map_to_node && map_to_node+1 < source+1
              || source <= map_to_node && map_to_node_next <= source+1;
    }
    return result;
}

int main(int a_argc, char** a_argv)
{
    for(unsigned i=0;i<100;++i)
    {
        printf("%d = %d\n",i,is_clear_bit(0.1f,i));
    }
    return 0;
}


вывод следущий:
0 = 1
...
80 = 1
81 = 1
82 = 1
83 = 1
84 = 1
85 = 1
86 = 1
87 = 1
88 = 1
89 = 0
90 = 1
91 = 1
92 = 1
93 = 1
94 = 1
95 = 1
96 = 1
97 = 1
98 = 1
99 = 0
откуда появились 0 и как это предотвротить?
...
Рейтинг: 0 / 0
float что за чудеса?
    #38262373
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Katamaran1987откуда появились 0 и как это предотвротить?

У float точность - шесть знаков после запятой. Ты точно уверен, что понимаешь как работают
в компьютерах числа с плавающей запятой и что они тебе нужны?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
float что за чудеса?
    #38262385
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovKatamaran1987откуда появились 0 и как это предотвротить?

У float точность - шесть знаков после запятой. Ты точно уверен, что понимаешь как работают
в компьютерах числа с плавающей запятой и что они тебе нужны?..
расскажи коль не трудно
...
Рейтинг: 0 / 0
float что за чудеса?
    #38262421
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovKatamaran1987откуда появились 0 и как это предотвротить?

У float точность - шесть знаков после запятой. Ты точно уверен, что понимаешь как работают
в компьютерах числа с плавающей запятой и что они тебе нужны?..


У float точность - в количестве ДВОИЧНЫХ знаков после запятой.
Десятичную можно только примерно указать.
...
Рейтинг: 0 / 0
float что за чудеса?
    #38262426
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Katamaran1987Dimitry Sibiryakovпропущено...

У float точность - шесть знаков после запятой. Ты точно уверен, что понимаешь как работают
в компьютерах числа с плавающей запятой и что они тебе нужны?..
расскажи коль не трудно

Всё уже рассказано до нас...
http://ru.wikipedia.org/wiki/Числа_с_плавающей_запятой
...
Рейтинг: 0 / 0
float что за чудеса?
    #38262508
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivУ float точность - в количестве ДВОИЧНЫХ знаков после запятой.
Десятичную можно только примерно указать.
Это если вы будете считать дробное колво цифр - тогда да :)
А с практической точки зрения точнось мантиссы float ровно 7 десятичных цифр (суммарно до и после точки).
...
Рейтинг: 0 / 0
float что за чудеса?
    #38262540
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Katamaran1987,
Смотри ещё чудеса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
                                                                                                                                                                         
#include <stdio.h>

bool is_clear_bit(const float koef,unsigned idx)
{
  bool result = false;
  if( koef <= 1 )
    {
      float map_to_node = koef * float(idx);
      unsigned source = (unsigned)map_to_node;
      float map_to_node_next = map_to_node + koef;
      result = source >= map_to_node && map_to_node+1 < source+1
            || source <= map_to_node && map_to_node_next <= source+1;
    }
  return result;
}

bool is_clear_bit2( const float koef, unsigned idx )
{
  if( koef <= 1 )
    {
      return unsigned( koef * float(idx) ) >= float( koef * float(idx) ) && float( koef * float(idx) ) + 1 <  unsigned( koef * float(idx) ) + 1
          || unsigned( koef * float(idx) ) <= float( koef * float(idx) ) && float( koef * float(idx + 1) ) <= unsigned( koef * float(idx) ) + 1
      ;
    }
  else
    return false;
}

int main(int a_argc, char** a_argv)
{
  for(unsigned i=0;i<100;++i)
    {
      printf( "%d = %d, %d\n", i, is_clear_bit(0.1f,i)?1:0, is_clear_bit2( 0.1f, i )?1:0 );
    }
  return 0;
}



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
ziv@mule:~/tmp$ g++ -o float float.cpp && ./float 
0 = 1, 1
1 = 1, 1
...
87 = 1, 1
88 = 1, 1
89 = 0, 1
90 = 1, 1
91 = 1, 1
92 = 1, 1
93 = 1, 1
94 = 1, 1
95 = 1, 1
96 = 1, 1
97 = 1, 1
98 = 1, 1
99 = 0, 1

...
Рейтинг: 0 / 0
float что за чудеса?
    #38262542
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyMasterZivУ float точность - в количестве ДВОИЧНЫХ знаков после запятой.
Десятичную можно только примерно указать.
Это если вы будете считать дробное колво цифр - тогда да :)
А с практической точки зрения точнось мантиссы float ровно 7 десятичных цифр (суммарно до и после точки).

Проблема-то ещё и в том, что на самом деле точности никакой и нет.
...
Рейтинг: 0 / 0
float что за чудеса?
    #38262558
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Katamaran1987, ты бы кстати объяснил бы, что это условие обозначает:

Код: plaintext
1.
2.
        result = source >= map_to_node && map_to_node+1 < source+1
              || source <= map_to_node && map_to_node_next <= source+1;
...
Рейтинг: 0 / 0
float что за чудеса?
    #38262590
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПроблема-то ещё и в том, что на самом деле точности никакой и нет.
Точность есть. Тольео она относится к мантиссе, а не ко всему числу.
Если помнить об этом, то проблемы никакой нет.
...
Рейтинг: 0 / 0
float что за чудеса?
    #38263519
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyMasterZivПроблема-то ещё и в том, что на самом деле точности никакой и нет.
Точность есть. Только она относится к мантиссе, а не ко всему числу.
Если помнить об этом, то проблемы никакой нет.

Не совсем. Когда происходит потеря значимости, это происходит как раз по причине большой разницы в порядках.
...
Рейтинг: 0 / 0
float что за чудеса?
    #38263663
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНе совсем. Когда происходит потеря значимости, это происходит как раз по причине большой разницы в порядках.
Это прямое следствие того, о чем я сказал.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / float что за чудеса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]