crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> c++ double
mycoding
  опции профиля:
сообщение 5.3.2010, 9:52
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 17.11.2009
Пользователь №: 1237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Подскажите пожалуйста, как сделать точность знаков вот в этом случае, ну например 10 после запятой
for(int i=0;i<100;i++)
{
sin1[i]=sin((double)i/10)*10+250;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 5.3.2010, 14:55
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


"точность знаков" - это при печати тебе надо? в double нет никакой "точности знаков", он будет хранить 8 байт и там будет 15 знаков, по определению типа, если это Си.
можешь, конечно, попробовать искусственно отсекать "лишнее", если тебе очень критично. но вопрос - зачем?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mycoding
  опции профиля:
сообщение 5.3.2010, 16:07
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 17.11.2009
Пользователь №: 1237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Да нет, надо не cout, а именно в массив записать с точностью до 8-10 знаков после запятой, а то тот код который приведён, он почему-то только 3 знака берёт после запятой, а должно быть 6.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 5.3.2010, 22:01
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(mycoding @ 5.3.2010, 18:07) *
Да нет, надо не cout, а именно в массив записать с точностью до 8-10 знаков после запятой, а то тот код который приведён, он почему-то только 3 знака берёт после запятой, а должно быть 6.

а как ты проверял, что 3?
вообще, в double дофига знаков. а sin возвращает значение типа double. у тебя там значения ни о чём для double - должны сохраняться все 15 знаков.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
mycoding
  опции профиля:
сообщение 6.3.2010, 13:36
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 17.11.2009
Пользователь №: 1237

Спасибо сказали: 0 раз(а)




Репутация:   0  


Проверял на javascripte, нужны ещё 6 знаков после запятой.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 6.3.2010, 20:28
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(mycoding @ 6.3.2010, 15:36) *
Проверял на javascripte, нужны ещё 6 знаков после запятой.

поясни, как ты проверял сишный вывод "на жабаскрипте"?
у Си никакого урезания в double не происходит. жабаскрипт - не строго типизированный язык и, вообще говоря, там даже не знаю, можно ли надеяться хоть на какую-то точность представления или нет. это скриптовый язык, не рассчитанный на математические вычисления. я не знаю, как ты эти два слишком разных языка скрестить ухитрился, но попробуй сделай обычный вывод в консоль средставами Си и убедишься, что Си выдаёт тебе более чем достаточно знаков.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 7.3.2010, 18:59
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Читать что такое числа с плавающей точкой до просветления. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 8.3.2010, 20:39
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Так например:

da = 123.0001;
da = int(da*1000+0.005)/1000.0


10.0 - десятые, 1 знак
100.0 - сотые, 2 знака
1000.0 - тысячные, 3 знака
...
1000000.0 - миллионные, 6 знаков после запятой

Только надо проверку какую-нибудь, чтобы int не переполнился.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 21:46