Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
я ж в первом посте написал что хотел решить )))
мне надо посчитать к примеру все Low по определенной цене за определенный период
для этого я взял массив , но т.к. в индекс массива можно всунуть только int , то я цену умножил на 5-знаке - на 100000 и нормализовал чтоб получить int значение и потом пройдясь по истории где получался такой же int индекс для массива записал +1
мне нужно было чтобы ту что я вижу цену на графике чтобы ту же он потом и отмечал в массиве а не с допуском в 1 пп - хз как тут округление сработает, как то не подумал про него , посмотрю
спасибо за ответы )
Вот я так и не понял в чём ваша задача.
Вы хотите преобразовать цену в int, чтобы его использовать как индекс массива, где будете посчитать количество одинаковых цен Low ?
Если да, то есть такие пары, например USDZAR, целая часть которого 14, вот сейчас 14.20112. Размер массива будет очень большой. Как вы собираетесь его использовать.
Есть такая константа:
DBL_EPSILON
Наименьшее число для которого выполняется условие 1.0+DBL_EPSILON != 1.0
2.2204460492503131e
Не нужен вам НормализДабл, выше уже верно сказали:
Кстати, НормализДабл примерно так работает:
Вот я так и не понял в чём ваша задача.
Вы хотите преобразовать цену в int, чтобы его использовать как индекс массива, где будете посчитать количество одинаковых цен Low ?
Если да, то есть такие пары, например USDZAR, целая часть которого 14, вот сейчас 14.20112. Размер массива будет очень большой. Как вы собираетесь его использовать.
Давайте я за вас подумаю. Если у котировок пять знаков, то пятый знак можно округлить, то есть - надо нормализовать цены по четырем знакам, а потом уж все остальное применять.
Как можно точнее переводить double в int ?
Объявить переменную - string и через преобразование вписывать в нее результаты Ваших действий.
И что такое преобразовать точнее из double в int?! Не понятное явление народу. Все что будет после запятой будет не о-круг-лять-ся, а отбрасываться напрочь. Если у Вас была цена доубле 1.43534 то инт она будет - еденицей -1. И машина не математик, а выполняет то, что в нее заложено. А вот если бы Вы ей сказали, что число доубле 1.43534 надо преобразовать в число доубле с двумя знаками после запятой, то она Вам выдала 1.44 Надо понимать, что машина это не человек и она не будет догадываться наперед что Вам надо.Объявить переменную - string и через преобразование вписывать в нее результаты Ваших действий.
А я такая одна стою в белом пальто?
Давайте я за вас подумаю. Если у котировок пять знаков, то пятый знак можно округлить, то есть - надо нормализовать цены по четырем знакам, а потом уж все остальное применять.
А зачем потерять 5-ый знак, может быть он нужен. Я так и не понял для чего этот массив и какая задача поставлена.
Но могу предложить другое.
Мы знаем верхний и нижний пределы цен (max+Q и min-Q), с каким-то запасом(Q). Размер массива(size) будет (max+Q) - (min-Q), а индекс для обращения к массиву: index=size - (min-Q).
Т.е. идея в том, что если используется небольшой участок цен, то надо хранить в массиве только этот участок, а не с нуля.
А на счет преобразования double в int, я делаю так. Если предположим, что количество знаков после запятой ровно 5 знаков, то можно написать так:
int a = 1.31045 + 0.000005;
это конечно частный случай, но самый быстрый. И лучше написать несколько if, чем использовать тяжелые функции.
А я такая одна стою в белом пальто?
Дмитрий здравствуйте. Скорей всего в черном. Я только еще учусь. Было время когда скачивал и исправлял предупреждения компилятора. И вот он предупреждения убрал, а логику нарушил: ни как из доубле не получится инт с дробью - ни как.
И он там умножает что бы избежать это. Вот ему и надо использовать переменную string .
А зачем потерять 5-ый знак, может быть он нужен. Я так и не понял для чего этот массив и какая задача поставлена.
Но могу предложить другое.
Мы знаем верхний и нижний пределы цен (max+Q и min-Q), с каким-то запасом(Q). Размер массива(size) будет (max+Q) - (min-Q), а индекс для обращения к массиву: index=size - (min-Q).
Т.е. идея в том, что если используется небольшой участок цен, то надо хранить в массиве только этот участок, а не с нуля.
А на счет преобразования double в int, я делаю так. Если предположим, что количество знаков после запятой ровно 5 знаков, то можно написать так:
int a = 1.31045 + 0.000005;
это конечно частный случай, но самый быстрый. И лучше написать несколько if, чем использовать тяжелые функции.
Если нужен пяты знак, значит нужен, значит использовать. Тут никто не писал, что собирается использовать массив от нуля. Кажется несложно додуматься использовать массив размером с диапазон цены и вычислять индекс. Даже если сразу не додуматься - потом придется.
Простые, быстрые и частные случаи. Может в каких-то частных случаях и пойдет. Тут уже были попытки предложить свои быстрые альтернативные функции нормализации, но они, кажется успехом не закончились.
Дмитрий здравствуйте. Скорей всего в черном. Я только еще учусь. Было время когда скачивал и исправлял предупреждения компилятора. И вот он предупреждения убрал, а логику нарушил: ни как из доубле не получится инт с дробью - ни как.
И он там умножает что бы избежать это. Вот ему и надо использовать переменную string .
Конечно можно преобразовать в строку, разобрать по знакам, всех их проанализировать, но это будет медленно работать. К тому же есть специализированные средства.
Тут никто и никто и не пытается делать чудо и всунуть в инт дробное число. Подразумевается, что после вычисления дробного остатка нет (в обычной математике), но здесь при арифметических действиях с даблами может появиться погрешность, которая может дать ошибку вычислений величиной в единицу. Вот собственно с этой ошибкой идет борьба.