Народ, вопрос в следующем мне не хватает переменной Double, но вполне подходит longdouble, которой в VBнет. Что мне делать, писать dll на С(ни разу не писал dll), есть какие-то компоненты для VBи их применить, или тем кому это предназначается сказать, что "извините не получилось"J. Надо очень быстро написать эти расчеты.
Использую метод наименьших квадратов, входные данные типа signed int(4 байта со знаком), выходные longdouble.
Народ помогите разобраться или посоветуйте что-нибудь, где мне раздобыть такую переменную, может это кому еще понадобится, ведь некоторым необходимо точные вычисления.
LamerOnLine, почему??? long double-10 байт; double-8 байт
Microsoft Visual C++ is consistent with the IEEE numeric standards. There are three internal varieties of real numbers. Real*4 and real*8 are used in Visual C++. Real*4 is declared using the word float. Real*8 is declared using the word double. In Windows 32-bit programming, the long double data type maps to double. There is, however, assembly language support for computations using the real*10 data type.
The values are stored as follows:
Value
Stored as
real*4
sign bit, 8-bit exponent, 23-bit mantissa
real*8
sign bit, 11-bit exponent, 52-bit mantissa
real*10
sign bit, 15-bit exponent, 64-bit mantissa
вот мне как раз последний и устраивает
Я пишу на VB6, там только есть только Variant, и определен он криво мне не подходит, а с Demical я пока не разобрался, если поможешь примером буду признателен
Sharp , ты извини, но я не совсем понимаю, а как с этим типом работать??? И как сделать преобразование ведь входные данные не разделены на мантису и экспоненту. Может это и есть, что мне надо, но как производить вычисление и т.д. не понятно
Djoni, да не почему. Если ты пишешь под Win16, тогда Long Double рулит. В других случаях - отдыхает.
Previous 16-bit versions of Microsoft C/C++ and Microsoft Visual C++ supported the long double, 80-bit precision data type. In Win32 programming, however, the long double data type maps to the double, 64-bit precision data type. The Microsoft run-time library provides long double versions of the math functions only for backward compatibility. The long double function prototypes are identical to the prototypes for their double counterparts, except that the long double data type replaces the double data type. The long double versions of these functions should not be used in new code.
The long double type is identical to the double type.
Ну а с Varinant и CDec я вообще проблем не вижу, открой VB Help и посмотри их формат. Там же и примеры. Все просто.
Да тебе, собственно, нужен не сам вариант вообще, а конкретно Decimal. Открой на него справку, а также на CDec(). А то замаешься копаться в этом Variant'е...
Decimal variables are stored as signed 128-bit (16-byte) integers scaled by a variable power of 10. The scaling factor specifies the number of digits to the right of the decimal point; it ranges from 0 through 28. With a scale of 0 (no decimal places), the largest possible value is +/-79,228,162,514,264,337,593,543,950,335. With 28 decimal places, the largest value is +/-7.9228162514264337593543950335, and the smallest nonzero value is +/-0.0000000000000000000000000001 (+/-1E-28).
Appending the literal type character D to a literal forces it to the Decimal data type. Appending the identifier type character @ to any identifier forces it to Decimal. You might need to use the D type character to assign a large value to a Decimal variable or constant, as the following example shows:
Dim BigDec1 As Decimal = 9223372036854775807 ' No overflow.
Dim BigDec2 As Decimal = 9223372036854775808 ' Overflow.
Dim BigDec3 As Decimal = 9223372036854775808D ' No overflow.
This is because without a literal type character the literal is taken as Long, and the value to be assigned to BigDec2 is too large for the Long type.
The equivalent .NET data type is System.Decimal.
Разумеется, если тебе нужна мантисса. С экспонентой тут сложновато
На этом сайте есть статья о реализации длинной арифметики. В конце статьи исходники для целых чисел. Если нужна арифметика для вещественных чисел, то сообщи мне, я вышлю на твой e-mail
БОЛЬШОЕ СПАСИБО ВСЕМ ОТВЕТИВШИМ!!! Буду все обдумывать и что-то пробовать написать и смотреть степень приближения к рассчетам в MatchCad, если ни чего не потеряется, то должно все совпасть.
Hidden Warrior спасибо, я сейчас все осознаю и если понадобиться попрошу у тебя с твоего разрешения.