|
Конвертация чисел двойной точности (64 бит) по стандарту IEEE754
|
|||
---|---|---|---|
#18+
Для чисел одинарной точности (32 бит) по стандарту IEEE754 нашёл на просторах интернета довольно шуструю и простую функцию конвертации: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
А вот может кому известна подобная функция, которая позволяет конвертировать числа двойной точности (64 бит) по стандарту IEEE754 ??? &H419D6F34547E6B75 ->+123456789,12345679104328155517578125 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 00:30 |
|
Конвертация чисел двойной точности (64 бит) по стандарту IEEE754
|
|||
---|---|---|---|
#18+
IEEE 754, идея-то правильная и функция простая, но такое описание параметров (As Variant) и способ преобразования Val("&H" & b1 & b2 & b3 & b4 & "&") является очень неустойчивым к потенциальным ошибкам (из серии "как не надо делать"). А запрашиваемая функция делается по аналогии: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Вызов: Код: vbnet 1. 2.
Есть ещё пара вариантов, основанных на вызове функций копирования области памяти, но незачем, LSet-а достаточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 11:10 |
|
Конвертация чисел двойной точности (64 бит) по стандарту IEEE754
|
|||
---|---|---|---|
#18+
[quot 13-й квартал]IEEE 754, идея-то правильная и функция простая, но такое описание параметров (As Variant) и способ преобразования Val("&H" & b1 & b2 & b3 & b4 & "&") является очень неустойчивым к потенциальным ошибкам (из серии "как не надо делать"). Где там As Variant? Подробнее про возможніе ошибки, пожалуйста. В чём нестабильность? так как надо решиться, свою функцию делать или взять за основу этот вариант, хотя его механизм до конца мне не ясен. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 11:47 |
|
Конвертация чисел двойной точности (64 бит) по стандарту IEEE754
|
|||
---|---|---|---|
#18+
IEEE 754Где там As Variant?Здесь: Код: vbnet 1.
При описании переменных и аргументов действует правило:HelpIf you don't specify a data type or object type, and there is no Deftype statement in the module, the variable is Variant by default.DefByte нет (не показан в листинге, по крайней мере). Соответственно, (с учётом других правил): Код: vbnet 1.
превращается в Код: vbnet 1.
.IEEE 754Подробнее про возможніе ошибки, пожалуйста. В чём нестабильность? Таким образом, в функцию можно передать чёрта лысого, и она этого не заметит, потому что входные параметры не типизированы строго и их значения ничем не ограничены. Но это не всё. Очень легко совершить ошибку типа такой: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Суслик виден? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 12:54 |
|
Конвертация чисел двойной точности (64 бит) по стандарту IEEE754
|
|||
---|---|---|---|
#18+
Понятно, надо Function Hex2Ieee754(b1 AS String, b2 AS String, b3 AS String, b4 AS String) AS Single В первом b(1) = CByte("&HBB") Во втором b(1) = CByte("&H0B") Так в чём ошибка, в контроле за входными данными? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 17:37 |
|
Конвертация чисел двойной точности (64 бит) по стандарту IEEE754
|
|||
---|---|---|---|
#18+
IEEE 754, ошибки явной нет - есть ситуация, увеличивающая вероятность трудноотлавливаемых ошибок. Зачем в неё попадать, если можно правильно (As Byte) описать аргументы функции и не использовать потенциально непредсказуемый Val() вкупе с конкатенацией (кстати, если считать блох, то это медленные операции)? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 18:49 |
|
Конвертация чисел двойной точности (64 бит) по стандарту IEEE754
|
|||
---|---|---|---|
#18+
IEEE 754в чём ошибка?Hex("&H0B")="B" ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 19:04 |
|
Конвертация чисел двойной точности (64 бит) по стандарту IEEE754
|
|||
---|---|---|---|
#18+
13-й квартал, Логично, тем более, что данные считываются из файла как Byte, но конкатенацию применить придётся, для проверки попадания значения в диапазон между &HFF800000 (- бесконечность) и &H7F800000 (+ бесконечность) иначе NAN (не число). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 19:06 |
|
|
start [/forum/topic.php?fid=60&msg=38530070&tid=2156564]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 406ms |
0 / 0 |