Re[6]: 42 битное число!!
От: Tan4ik Россия  
Дата: 01.07.04 10:29
Оценка:
Здравствуйте, Andrew S, Вы писали:

T>>>А в качестве индекса все равно поиспользовать не получится... хоть double используй, хоть __int64.


LVV>>Предел float 10^38 = 2^38*5^38

LVV>>2^42 = 2^4*2^38 = 16*2^38
LVV>>Очень даже организуешь!
LVV>>Или я где-то грабли не вижу?

AS>Конечно не видите, что, вообще говоря, странно...

AS>Распределение вещественных чисел, представляемых флоат (да и любым числом с плавающей точкой) на множестве вещественных чисел, неравномерно. Наиболее плотно числа представлены (отбросив знак) в районе единицы, далее, ближе к границам диапазона — значительно более разрежено. Т.е. далеко не все целые числа из диапазона флоата можно с точностью до +-0.5 им представить.
Наиболее плотно — в районе нуля

AS>Более того. Общее количество (вещественных) чисел, представляемых float, составляет примерно (точно я не помню) 2^25 + 1.

Больше. Намного больше. Чуть меньше 2^32 (меньше из-за того, что некоторые числа имеют неоднозначное представление, но таких чисел очень мало).

AS>Общее количество (вещественных) чисел, представляемых double, состоявляет 2^53 + 1,

Тоже ошибаешься. Порядка 2^64. Как и следовало ожидать.

AS>т.е. им представить 42 битное число с некоторой осторожностью можно (при этом, очевидно, от операции инкремента в виде прибавления единички к значению придется отказаться, придумав нечто другое, что не изменяло бы значения порядка, а только мантиссы).

Осторожность никогда не повредит, но в данном случае можно смело пользоваться double. При условии, что используются только +-*= и значение не вылазиет за 2^52.

AS>В общем — правильнее и быстрее использовать вложеный цикл на long, если компилер не поддерживает 64-х битные целые.

Правильнее? Наверное да. Быстрее? Сомниваюсь. Все зависит от задачи и "внутренностей" цикла.
---
С уважением,
Лазарев Андрей
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.