| 
 | 
| 
 
Конвертация чисел двойной точности (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=38529963&tid=2156564]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    14ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    51ms | 
get topic data:  | 
    14ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    55ms | 
get tp. blocked users:  | 
    2ms | 
| others: | 227ms | 
| total: | 384ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.