реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как правильно выполнять округление до ближайшего?, RealView Compiler
aaarrr
сообщение Dec 14 2009, 17:25
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Sneg_87 @ Dec 14 2009, 19:22) *
long a=5.6;

Ну, дальше можно уже не читать.

Цитата(Sneg_87 @ Dec 14 2009, 19:22) *
//перед преобразованием умножать на 10, чтоб был остаток от деления в дальнейшем
a=a*10;
//теперь а=56
a=((int)(a+a%10))/10;
//поясню (int) (56+6) и деленое на 10 будет 6, что и необходимо

Умножение + 2 деления + сложение = хороший пример того, как делать не надо.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 15 2009, 17:57
Сообщение #17


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Sneg_87 @ Dec 14 2009, 19:22) *
ЗЫ при проверке в досовском Borland: задавал а=5.1 далее умножал на 10 и получал а=50.999. кто может объяснить в чем дело?
Точность представления чисел конечная. Чего вы хотите?
Для float:
старший бит - знак,
8 бит - порядок со смещением 127,
23 бита - мантисса.

2^23= 8388608. Итог: имеем лишь ~7 десятичных значащих разрядов...

погуглите на тему: формат IEEE754


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Sneg_87
сообщение Dec 15 2009, 18:35
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 12-10-09
Пользователь №: 52 882



Цитата(aaarrr @ Dec 14 2009, 22:25) *
Умножение + 2 деления + сложение = хороший пример того, как делать не надо.

Чем плох вариант без подключения внешних библиотек? Единственным пожалуй минусом является время, что думаю не критично для ситуации. Ну а вторымб что он не пойдет, сейчас исправим smile.gif

Вот работающий на 100% (сам проверял) листинг программки, выдающий требуемый результат:
Код
#include "stdio.h"
#include "conio.h"
#include <iostream.h>

main () {
clrscr();
float a=6.9;
int b=0;
a=a*10;
b=a;
b=((int)(b+b%10))/10;
printf ("%i",буква "b" не вводилась на форуме);
getch();
}


Сообщение отредактировал rezident - Dec 16 2009, 00:19
Причина редактирования: Оформление цитаты исходника.


--------------------
coding, кодинг, koDinГ, copyriting, printing ....
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 15 2009, 18:35
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Sneg_87 @ Dec 15 2009, 21:12) *
Чем плох вариант без подключения внешних библиотек?

Он бесконечно хуже такого макроса:
Код
#define FROUNDS(x)                (((x)>=0)?(long)((x)+0.5f):(long)((x)-0.5f))

А уж это (выделено):
Цитата
b=((int)(b+b%10))/10;

- вообще ни в какие ворота.

А то, что он "работает" - так это, извините, не аргумент.
Go to the top of the page
 
+Quote Post
Sneg_87
сообщение Dec 16 2009, 18:56
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 12-10-09
Пользователь №: 52 882



Цитата(aaarrr @ Dec 15 2009, 23:35) *
А то, что он "работает" - так это, извините, не аргумент.

не люблю разводить темы насчет демогогии выбора. каждый выбирает то, что хочет.
ЗЫ автору предложено 2 способа, думаю сам выберет, что подходит.


--------------------
coding, кодинг, koDinГ, copyriting, printing ....
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 16 2009, 23:35
Сообщение #21


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Sneg_87, такие "конструкции" в реальных проектах никто использовать не будет.
И никто Вам даже не будет объяснять почему! Это очевидно. smile.gif


P.S. дизассемблер, кстати, клёвая штука. Предлагаю им воспользоваться wink.gif


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 10th August 2025 - 00:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016