Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ฟังก์ชัน DataView.getFloat64() ใน JavaScript

DataView.getFloat64() คืออะไร

เมธอด DataView.prototype.getFloat64() ใช้สำหรับ อ่านค่าจำนวนจริง 64-bit (double precision floating point) จากตำแหน่งที่กำหนดใน DataView ตามมาตรฐาน IEEE 754 binary64 นี่คือรูปแบบเดียวกับชนิด number ของ JavaScript เอง

ไวยากรณ์ (Syntax)

dataView.getFloat64(byteOffset [, littleEndian])
  • byteOffset - ตำแหน่งเริ่มต้นในหน่วยไบต์ (0-indexed)
  • littleEndian (optional) - true = little-endian, false = big-endian (default: false)

คืนค่า: จำนวนจริง 64-bit (JavaScript number)

ตัวอย่างการใช้งาน

ตัวอย่างที่ 1: การอ่านค่าพื้นฐาน

const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);

view.setFloat64(0, 654.44);
console.log(view.getFloat64(0)); // 654.44

ตัวอย่างที่ 2: การใช้ค่าคงที่ทางคณิตศาสตร์ (Math constants)

const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);

view.setFloat64(0, Math.PI);
console.log(view.getFloat64(0)); // 3.141592653589793

view.setFloat64(0, Math.LOG2E);
console.log(view.getFloat64(0)); // 1.4426950408889634

view.setFloat64(0, Math.SQRT2);
console.log(view.getFloat64(0)); // 1.4142135623730951

ตัวอย่างที่ 3: การจัดการ Endianness

const buffer = new ArrayBuffer(16);
const view = new DataView(buffer);
const value = Math.PI;

view.setFloat64(0, value, false); // big-endian
view.setFloat64(8, value, true);  // little-endian

console.log('BE:', view.getFloat64(0, false)); // 3.14159...
console.log('LE:', view.getFloat64(8, true));  // 3.14159...

// อ่านแบบผิด endian จะได้ค่า nonsense
console.log('Wrong:', view.getFloat64(0, true)); // ค่าแปลกๆ

ตัวอย่างที่ 4: ค่าพิเศษ (Special Values)

const buffer = new ArrayBuffer(32);
const view = new DataView(buffer);

view.setFloat64(0,  Infinity);
view.setFloat64(8, -Infinity);
view.setFloat64(16, NaN);
view.setFloat64(24, -0);

console.log(view.getFloat64(0));  // Infinity
console.log(view.getFloat64(8));  // -Infinity
console.log(view.getFloat64(16)); // NaN
console.log(view.getFloat64(24)); // -0 (แสดงเป็น 0 แต่ sign bit = 1)
console.log(1 / view.getFloat64(24)); // -Infinity (ยืนยันว่าเป็น -0 จริง)

ตัวอย่างที่ 5: อ่านค่าที่ยังไม่ได้ตั้งค่า

const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);
console.log(view.getFloat64(0)); // NaN (ไม่ใช่ 0 เหมือน integer types)

IEEE 754 Binary64 (Double Precision) Format

64-bit แบ่งเป็น:

  • 1 bit - Sign (S)
  • 11 bits - Exponent (E) - bias = 1023
  • 52 bits - Mantissa/Significand (M) - implicit leading 1

ค่า = (-1)^S × 1.M × 2^(E-1023)

ความแตกต่างระหว่าง Float32 และ Float64

คุณสมบัติFloat32 (single)Float64 (double)
ขนาด4 bytes (32 bits)8 bytes (64 bits)
Exponent bits811
Mantissa bits2352
Precision (decimal digits)~7~15-17
Range~±3.4×10^38~±1.8×10^308
JavaScript number❌ ต้องแปลง✅ ตรงกัน

กรณีการใช้งานทั่วไป

  • Scientific computing: ความแม่นยำสูง สำหรับการคำนวณวิทยาศาสตร์
  • Financial data: ราคาหุ้น, อัตราแลกเปลี่ยน (แต่ควรใช้ decimal library สำหรับเงินจริง)
  • Graphics/WebGL: Vertex attributes, transformation matrices
  • Serialization: แปลง JavaScript number เป็น binary และกลับมา
  • Interop: รับส่ง double กับ C/C++, WebAssembly, databases

กรณีพิเศษและข้อผิดพลาด

  • โยน RangeError หาก byteOffset ติดลบ หรือ byteOffset + 8 > byteLength
  • คืนค่า NaN หากอ่านจากตำแหน่งที่ไม่มีข้อมูล (ต่างจาก integer types ที่คืน 0)
  • Endianness สำคัญมาก - ต้องตรงกับรูปแบบที่เขียนไว้
  • JavaScript number คือ Float64 ดังนั้นไม่มี precision loss ในการแปลง