Как процессор обрабатывает типы float, double, decimal?
От: 0K Ниоткуда  
Дата: 03.07.08 08:20
Оценка:
Навеяно сим
Автор: zbanned
Дата: 03.07.08
.

Кто занимался вопросами:

Какие из перечисленных типов поддерживаются на аппаратном уровне процессором машины? decimal вроде не поддерживается? Т.е. это программная реализация и операции с этим типом значительно медленнее, чем с float. А double поддерживается на аппаратном или программная реализация?

Как я понимаю, float реализовывать программно смысла нет, т.к. у процессора есть операции для чисел с плавающей запятой такой точности.

Если так, то почему точность float только 7 знаков (8 == 8.99999976158142)? Должно ж быть 8?

ЗЫ
Все вышесказанное мои предположения, этим вопросом не занимался.
Re: Как процессор обрабатывает типы float, double, decimal?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 03.07.08 08:25
Оценка:
Здравствуйте, 0K, Вы писали:

0K>Навеяно сим
Автор: zbanned
Дата: 03.07.08
.


0K>Кто занимался вопросами:


0K>Какие из перечисленных типов поддерживаются на аппаратном уровне процессором машины? decimal вроде не поддерживается? Т.е. это программная реализация и операции с этим типом значительно медленнее, чем с float. А double поддерживается на аппаратном или программная реализация?


Все поддерживаются. Просто разные методы вызывают ранзные инструкции процессора для обработки.


0K>Как я понимаю, float реализовывать программно смысла нет, т.к. у процессора есть операции для чисел с плавающей запятой такой точности.


0K>Если так, то почему точность float только 7 знаков (8 == 8.99999976158142)? Должно ж быть 8?


Может имелось ввиду 9 == 8.99999976158142 ?
Re: Как процессор обрабатывает типы float, double, decimal?
От: Pavel Dvorkin Россия  
Дата: 04.07.08 10:04
Оценка: 2 (1)
Здравствуйте, 0K, Вы писали:

0K>Какие из перечисленных типов поддерживаются на аппаратном уровне процессором машины?


80-битный формат. В С++ именуется также long double, хотя MSVC такое не поддерживает и считает его просто double. Все операции внутри процессора производятся в этом формате. Во внешний мир передают в требуемом виде.


0K>Если так, то почему точность float только 7 знаков (8 == 8.99999976158142)? Должно ж быть 8?


6-7. Точнее, 23 (двоичных). double — 52 бита. Родной 80-битный — 64 бита.

В общем, почитай про стандарт IEEE 754 и 854. Например, здесь

http://en.wikipedia.org/wiki/IEEE_754
http://subscribe.ru/archive/comp.soft.prog.9899/200404/28151235.html
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.