@@ -456,6 +456,114 @@ func Float16FromBFloat16(b BFloat16) Float16 {
456456 return b .ToFloat16 ()
457457}
458458
459+ // Batch operations for high-performance computing
460+
461+ // BFloat16AddSlice performs element-wise addition of two BFloat16 slices
462+ func BFloat16AddSlice (a , b []BFloat16 ) []BFloat16 {
463+ if len (a ) != len (b ) {
464+ panic ("float16: slice length mismatch" )
465+ }
466+
467+ result := make ([]BFloat16 , len (a ))
468+ for i := range a {
469+ result [i ] = BFloat16Add (a [i ], b [i ])
470+ }
471+ return result
472+ }
473+
474+ // BFloat16SubSlice performs element-wise subtraction of two BFloat16 slices
475+ func BFloat16SubSlice (a , b []BFloat16 ) []BFloat16 {
476+ if len (a ) != len (b ) {
477+ panic ("float16: slice length mismatch" )
478+ }
479+
480+ result := make ([]BFloat16 , len (a ))
481+ for i := range a {
482+ result [i ] = BFloat16Sub (a [i ], b [i ])
483+ }
484+ return result
485+ }
486+
487+ // BFloat16MulSlice performs element-wise multiplication of two BFloat16 slices
488+ func BFloat16MulSlice (a , b []BFloat16 ) []BFloat16 {
489+ if len (a ) != len (b ) {
490+ panic ("float16: slice length mismatch" )
491+ }
492+
493+ result := make ([]BFloat16 , len (a ))
494+ for i := range a {
495+ result [i ] = BFloat16Mul (a [i ], b [i ])
496+ }
497+ return result
498+ }
499+
500+ // BFloat16DivSlice performs element-wise division of two BFloat16 slices
501+ func BFloat16DivSlice (a , b []BFloat16 ) []BFloat16 {
502+ if len (a ) != len (b ) {
503+ panic ("float16: slice length mismatch" )
504+ }
505+
506+ result := make ([]BFloat16 , len (a ))
507+ for i := range a {
508+ result [i ] = BFloat16Div (a [i ], b [i ])
509+ }
510+ return result
511+ }
512+
513+ // BFloat16ScaleSlice multiplies each element in the slice by a scalar
514+ func BFloat16ScaleSlice (s []BFloat16 , scalar BFloat16 ) []BFloat16 {
515+ result := make ([]BFloat16 , len (s ))
516+ for i := range s {
517+ result [i ] = BFloat16Mul (s [i ], scalar )
518+ }
519+ return result
520+ }
521+
522+ // BFloat16SumSlice returns the sum of all elements in the slice
523+ func BFloat16SumSlice (s []BFloat16 ) BFloat16 {
524+ sum := BFloat16PositiveZero
525+ for _ , v := range s {
526+ sum = BFloat16Add (sum , v )
527+ }
528+ return sum
529+ }
530+
531+ // BFloat16ToSlice32 converts a slice of BFloat16 values to float32
532+ func BFloat16ToSlice32 (s []BFloat16 ) []float32 {
533+ result := make ([]float32 , len (s ))
534+ for i , v := range s {
535+ result [i ] = v .ToFloat32 ()
536+ }
537+ return result
538+ }
539+
540+ // BFloat16FromSlice32 converts a slice of float32 values to BFloat16
541+ func BFloat16FromSlice32 (s []float32 ) []BFloat16 {
542+ result := make ([]BFloat16 , len (s ))
543+ for i , v := range s {
544+ result [i ] = BFloat16FromFloat32 (v )
545+ }
546+ return result
547+ }
548+
549+ // BFloat16ToSlice64 converts a slice of BFloat16 values to float64
550+ func BFloat16ToSlice64 (s []BFloat16 ) []float64 {
551+ result := make ([]float64 , len (s ))
552+ for i , v := range s {
553+ result [i ] = float64 (v .ToFloat32 ())
554+ }
555+ return result
556+ }
557+
558+ // BFloat16FromSlice64 converts a slice of float64 values to BFloat16
559+ func BFloat16FromSlice64 (s []float64 ) []BFloat16 {
560+ result := make ([]BFloat16 , len (s ))
561+ for i , v := range s {
562+ result [i ] = BFloat16FromFloat32 (float32 (v ))
563+ }
564+ return result
565+ }
566+
459567// Convenience constants for common BFloat16 values
460568var (
461569 BFloat16Zero = BFloat16PositiveZero
0 commit comments