powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Глюки преобразования ?
19 сообщений из 19, страница 1 из 1
Глюки преобразования ?
    #34381617
bdfy1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверяли вот на perl, python, c, java: print int( 32.98 * 100) - результат: 3297 - с чем связано ?
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381655
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с отбрасыванием дробной части. это не глюки
чтобы было округления надо 0.5 прибавлять
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381660
bdfy1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так для других чисел все впорядке , в том числе и для .99 ???
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381662
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
32.98 * 100 это примерно 3297.9999999999995 - int - это отсечение дробной части
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381663
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с#

Код: plaintext
1.
2.
3.
      int x =  (int) ( 32 . 98  *  100 );
      Console.Write(x);

...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381671
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Дельфи
Код: plaintext
Showmessage(inttostr(round( 32 . 98 * 100 )));
нормально выдает
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381672
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bdfy1Ну так для других чисел все впорядке , в том числе и для .99 ???

не правда
Код: plaintext
1.
2.
3.
4.
5.
6.
    if (gVars.test) {      

      int x =  (int) ( 65 . 96  *  100 );
      Console.Write(x);
      return  5 ;
    }
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381677
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zloy denВ Дельфи
Код: plaintext
Showmessage(inttostr(round( 32 . 98 * 100 )));
нормально выдает

выдай round(0.5)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    if (gVars.test) {      

      int x =  (int) ( 65 . 96  *  100 );
      int y = (int)  0 . 5 ;
      Console.Write(x);
      Console.Write("\n");

      Console.Write(y);
      return  5 ;
    }
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381680
bdfy1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а причем тут тогда целая часть ? просто например для 63.96 все в порядке а вот для числа которое вы привели - .95 ... - Не вижу закономерности ....
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381681
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0 отвечает
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381684
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bdfy1а причем тут тогда целая часть ? просто например для 63.96 все в порядке а вот для числа которое вы привели - .95 ... - Не вижу закономерности ....
я на 2 умножил 32.98
это от двоичного представления зависит
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381686
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zloy den0 отвечает
мда?
тогда надо к Софтвареру.
он все знает
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381694
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это точно
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381708
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
32.98 не может быть точно представлено в виде double, ибо в двоичном виде является бесконечной периодической дробью.

Хотите повеселиться? смотрите дальше
Код: plaintext
1.
2.
	double a= 32 . 98 ;
	double b= 32 . 979999999999997 ;
	if (a==b) _tprintf(_T("a=b"));
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381710
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в алголе плавающие сравнивались приблизительно

Код: 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.
i = 27, x = 27, y = 27
i = 28, x = 28, y = 28 
i = 29, x = 28, y = 29  <----------------------------
i = 30, x = 30, y = 30
i = 31, x = 31, y = 31
i = 32, x = 32, y = 32
i = 33, x = 33, y = 33
i = 34, x = 34, y = 34
i = 35, x = 35, y = 35
i = 36, x = 36, y = 36
i = 37, x = 37, y = 37
i = 38, x = 38, y = 38
i = 39, x = 39, y = 39
i = 40, x = 40, y = 40
i = 41, x = 41, y = 41
i = 42, x = 42, y = 42
i = 43, x = 43, y = 43
i = 44, x = 44, y = 44
i = 45, x = 45, y = 45
i = 46, x = 46, y = 46
i = 47, x = 47, y = 47
i = 48, x = 48, y = 48
i = 49, x = 49, y = 49
i = 50, x = 50, y = 50
i = 51, x = 51, y = 51
i = 52, x = 52, y = 52
i = 53, x = 53, y = 53
i = 54, x = 54, y = 54
i = 55, x = 55, y = 55
i = 56, x = 56, y = 56
i = 57, x = 56, y = 57  <-------------------------
i = 58, x = 57, y = 58
i = 59, x = 59, y = 59



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
      int x =  (int) ( 65 . 96  *  100 );
      int y =  0 ;
      double f =  0 . 0 ;

      for (int i =  27 ; i <  60 ; i++) {
         f = i/ 100 . 0 ;
         x = (int )(f *  100 );
         y = (int )(f *  100  + . 5 );
         Console.Write("\ni = {0}, x = {1}, y = {2}", i, x, y);
      }
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34381717
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bdfy1проверяли вот на perl, python, c, java: print int( 32.98 * 100) - результат: 3297 - с чем связано ?
Связано с тем, что множества чисел с плавающей запятой, представимых в двоичной и десятичнй системах, не совпадают.
Современные процессоры оперируют двоичной системой.
Человек - десятичной.
При преобразовании выбирается наиболее близкое к оригинальному значение, но не тождественное значение.
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34382102
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
епта, чудики, приехали.

ВСЕМ ЮЗАТЬ ROUNDЫ и курить IEEE754 !!!

аффтопитезь: объект либо именован, либо не существует
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34383342
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLWKS> select floor(32.98*100) from dual
2>
FLOOR(32.9
----------
3298
Выбрана 1 строка.
...
Рейтинг: 0 / 0
Глюки преобразования ?
    #34386782
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C++ Language ReferenceWhen an object of floating type is converted to an integral type, the fractional part is truncated. No rounding takes place in the conversion process. Truncation means that a number like 1.3 is converted to 1, and –1.3 is converted to –1.
C# Programmer's ReferenceWhen you convert from a double or float value to an integral type, the value is rounded towards zero to the nearest integral value.

round же округляет более изощрённо
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Глюки преобразования ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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