Появилась острая необходимость создать свой тип данных по типу Double. Точности Float к сожалению не хватает, а использовать тип Double не представляется возможным. Для созданного типа понадобятся операции сложения и умножения. Наверняка кто-нибудь что-то подобное делал. Можете поделиться советами или кодом?
А>Появилась острая необходимость создать свой тип данных по типу Double...
Подумай хорошенько, правда ли она появилась? Уж не собираешься ли ты хранить там денежные значения?
Здравствуйте, Vamp, Вы писали:
А>>Появилась острая необходимость создать свой тип данных по типу Double... V>Подумай хорошенько, правда ли она появилась? Уж не собираешься ли ты хранить там денежные значения?
Точно, точно! Речь идет о серьезной математике, которая заложена в процессор.
Здравствуйте, Аноним, Вы писали:
А>Появилась острая необходимость создать свой тип данных по типу Double. Точности Float к сожалению не хватает, а использовать тип Double не представляется возможным. Для созданного типа понадобятся операции сложения и умножения. Наверняка кто-нибудь что-то подобное делал. Можете поделиться советами или кодом?
какие требования к этому типу? (отличные от double)
система счисления, место в памяти, скорость операторов...
Здравствуйте, Caracrist, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
C>какие требования к этому типу? (отличные от double) C>система счисления, место в памяти, скорость операторов...
Учитывая что в этот тип придется переходить из float, наверное двоичная удобней будет.
Место в памяти есть, таких значений не много будет, быстродействие не сильно важно, так как именно этот обсчет планируется выполнять раз в 30сек (60 сек)
Здравствуйте, Vamp, Вы писали:
A>>Точно, точно! Речь идет о серьезной математике, которая заложена в процессор. V>Деньги в данных с плавающей точкой не хранят никогда.
Здравствуйте, toffeeA, Вы писали:
A>Здравствуйте, Caracrist, Вы писали:
C>>Здравствуйте, Аноним, Вы писали:
C>>какие требования к этому типу? (отличные от double) C>>система счисления, место в памяти, скорость операторов...
A>Учитывая что в этот тип придется переходить из float, наверное двоичная удобней будет. A>Место в памяти есть, таких значений не много будет, быстродействие не сильно важно, так как именно этот обсчет планируется выполнять раз в 30сек (60 сек)
я выделил жирным важную часть вопроса...
И того, вам нужен double.
от сюда два вопроса:
1. Почему "использовать тип Double не представляется возможным" ?
2. Какие базовые типы доступны для реализации аналога Double?
C>я выделил жирным важную часть вопроса... C>И того, вам нужен double.
C>от сюда два вопроса: C>1. Почему "использовать тип Double не представляется возможным" ? C>2. Какие базовые типы доступны для реализации аналога Double?
1. Потому что процессор не поддерживает такой тип данных. Написать Double в коде можно, но он его к 32-битному представлению приведет.
2. Из базовых типов — все целочисленные от char(unsigned char) до unsigned integer, и float.
Здравствуйте, toffeeA, Вы писали:
A>Здравствуйте, Caracrist, Вы писали:
C>>я выделил жирным важную часть вопроса... C>>И того, вам нужен double.
C>>от сюда два вопроса: C>>1. Почему "использовать тип Double не представляется возможным" ? C>>2. Какие базовые типы доступны для реализации аналога Double?
A>1. Потому что процессор не поддерживает такой тип данных. Написать Double в коде можно, но он его к 32-битному представлению приведет. A>2. Из базовых типов — все целочисленные от char(unsigned char) до unsigned integer, и float.
О! Уже приближаемся к истине!
Сложение, вычитание и умножение побитово не сложно организовать...
Вопрос: какие операции этот тип должен поддерживать?
(деление, корень, синусообразные... )
Здравствуйте, toffeeA, Вы писали:
A>Здравствуйте, Caracrist, Вы писали:
C>>я выделил жирным важную часть вопроса... C>>И того, вам нужен double.
C>>от сюда два вопроса: C>>1. Почему "использовать тип Double не представляется возможным" ? C>>2. Какие базовые типы доступны для реализации аналога Double?
A>1. Потому что процессор не поддерживает такой тип данных. Написать Double в коде можно, но он его к 32-битному представлению приведет. A>2. Из базовых типов — все целочисленные от char(unsigned char) до unsigned integer, и float.
мысль:
Смотреь в сторону реализаций Decimal. Их благо хватает, а логика должна быть аналогичной.
Здравствуйте, toffeeA, Вы писали: A>Место в памяти есть, таких значений не много будет, быстродействие не сильно важно, так как именно этот обсчет планируется выполнять раз в 30сек (60 сек)
А чем, тогда, не устраивает double?
Вообще, о какой платформе речь?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, toffeeA, Вы писали:
A>2. Из базовых типов — все целочисленные от char(unsigned char) до unsigned integer, и float.
Можно rational организовать, как отношение двух int, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, toffeeA, Вы писали: A>>Место в памяти есть, таких значений не много будет, быстродействие не сильно важно, так как именно этот обсчет планируется выполнять раз в 30сек (60 сек)
E>А чем, тогда, не устраивает double? E>Вообще, о какой платформе речь?
Речь идет о процессоре SHARC. А вы когда-нибудь сталкивались с реализацией типа в виде простой дроби или это просто мысль? У меня тоже она возникла, но какой-то маленький диапазон получается. Минимально в виде такой дроби можно записать 1/(2^32), что соответствует порядку 1E-10. А максимально (2^32)/1. Можно конечно парочку интов взять, но по-моему мне только лишь усложнит реализацию?
C>О! Уже приближаемся к истине! C>Сложение, вычитание и умножение побитово не сложно организовать... C>Вопрос: какие операции этот тип должен поддерживать? C>(деление, корень, синусообразные... )
Из операций только сложение, вычитание и умножение. Допустим организую я свой тип по типу double с 11-битной экспонентой и 52-битной мантиссой. Побитно достучаться к нему смогу и сконвертировать из float в этот формат и обратно. Но как организовать арифметические операции "побитово" без потери точности введенного типа я в упор не понимаю. И что за тип такой Decimal, можно поподробней?
Здравствуйте, toffeeA, Вы писали:
E>>А чем, тогда, не устраивает double? E>>Вообще, о какой платформе речь?
A>Речь идет о процессоре SHARC. А вы когда-нибудь сталкивались с реализацией типа в виде простой дроби или это просто мысль?
О чём речь — о реализации в виде простой дроби или о типе данных с плавающей точкой?
Если нужно деньги считать, то плавающая точка тут не нужна. Достаточно обычного целого. При этом надо помнить, что считаем не в единицах, а в сотых долях единиц (или в десятитысячных), в зависимости от задачи. Если диапазон маленький — то слепить несколько целых в один класс.