Точность вычислений VB vs VBS.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4158
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Точность вычислений VB vs VBS.

Сообщение Mikle » 24.11.2009 (Вт) 19:53

Код: Выделить всё
Option Explicit
Dim n, pi

pi = 0
For n = 1 To 20000000 Step 4
  pi = pi + 4 / n - 4 / (n + 2)
Next
pi = pi + 2 / n

msgbox pi

Такой код на VBS вычисляет число Пи с полной для Double точностью:
3.14159265358979
На vb6, если Pi задать, как Double, получаем:
3.14159265358897
Если как Variant:
3.14159265358984
Откуда такая разница?

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Точность вычислений VB vs VBS.

Сообщение Alec » 24.11.2009 (Вт) 21:27

Хм...
Такой код в VB 6.0
Код: Выделить всё
...
For n = 1 To 20000000 Step 4
  pi = pi + 4 / CDbl(n) - 4 / (CDbl(n) + 2)
Next
pi = pi + 2 / CDbl(n)
...

дает в итоге 3.14159265358979 и при pi As Variand и при pi As Double.
Значит дело в n, точнее в точности операций между Double и Long IMHO
Иногда лучше вовремя остановиться...
И начать заново!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Точность вычислений VB vs VBS.

Сообщение alibek » 24.11.2009 (Вт) 22:27

Видимо переводится в Decimal.
Lasciate ogni speranza, voi ch'entrate.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4158
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Точность вычислений VB vs VBS.

Сообщение Mikle » 25.11.2009 (Ср) 11:16

Alec писал(а):дает в итоге 3.14159265358979 и при pi As Variand и при pi As Double.

А у меня не даёт... Athlon64 3800+, что? AMD опять накосячили с точностью, как когда-то на K6-2? А почему тогда VBScript не ошибается, не использует сопроцессор?

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Точность вычислений VB vs VBS.

Сообщение Joo » 25.11.2009 (Ср) 17:46

Все дело в Double!
Знаю из собственных опытов, по крайней мере в C++ Double довольно не точная штука.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Точность вычислений VB vs VBS.

Сообщение Andrey Fedorov » 26.11.2009 (Чт) 15:44

Mikle писал(а):
Alec писал(а):дает в итоге 3.14159265358979 и при pi As Variand и при pi As Double.

А у меня не даёт... Athlon64 3800+, что? AMD опять накосячили с точностью, как когда-то на K6-2? А почему тогда VBScript не ошибается, не использует сопроцессор?


Athlon не причем - у меня Core 2 Duo и результат 3.14159265358897
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

v@Mp!rO
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 17.01.2004 (Сб) 17:45

Re: Точность вычислений VB vs VBS.

Сообщение v@Mp!rO » 26.11.2009 (Чт) 17:17

Не стоит вообще использовать числа с плавающей точкой в подобного рода коде. Почитайте что они из себя представляют и тогда поймете почему такая разница в результатах на разных процессорах.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4158
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Точность вычислений VB vs VBS.

Сообщение Mikle » 26.11.2009 (Чт) 19:24

У кого-нибудь ещё как у Alec работает?

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Точность вычислений VB vs VBS.

Сообщение Alec » 26.11.2009 (Чт) 20:33

Вообще прикольно...
Увидел
Mikle писал(а):У кого-нибудь ещё как у Alec работает?
, решил себя перепроверить... Был очень удивлен значениями
3.14159265358897
3.14159265358984
но не как не 3.14159265358979
Только хотел извиниться за ошибку, еще раз прогнал на VBS (3.14159265358979), поэкспериментировал типами, вернул все на место, запустил и... опять увидел 3.14159265358979!
Странно, думаю, запустил еще VB6, скопировал код - 3.14159265358984.
Вернулся - 3.14159265358979.
Начал писать пост, еще пару раз запустил - 3.14159265358928!
Похоже тут еще какие-то внешние силы действуют)))
Иногда лучше вовремя остановиться...
И начать заново!

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Точность вычислений VB vs VBS.

Сообщение SLIM » 26.11.2009 (Чт) 23:33

у меня что Variant что Double дает один ответ 10 раз из 10
3.14159265358984
Пишите жизнь на чистовик.....переписать не удастся.....


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Majestic-12 [Bot] и гости: 18

    TopList