code wiki / (root) / nx_linalg_affine_factor_baseline_t361.nx

nx_linalg_affine_factor_baseline_t361.nx source

↩ module page · 99 lines · 6399 B

1// nx_linalg_affine_factor_baseline_t361.nx -- Validates affine interval calculations for various floating-point edge cases. 2import "nx_linalg_affine_t34.nx" 3import "nx_gate_verdict.nx" 4func main()->i64{ 5 let ctr:*i64=sys_mmap(16) as *i64;let out:*i64=sys_mmap(48) as *i64;let input:*i64=sys_mmap(104) as *i64;let scratch:*i64=sys_mmap(384) as *i64 6 out[0]=717;out[1]=818 7 gv_check("zero exact declared interval",la_iv_f32(0,0,out)==0&&out[0]==0&&out[1]==0,ctr) 8 out[0]=717;out[1]=818 9 gv_check("negative-zero exact declared interval",la_iv_f32(2147483648,0,out)==0&&out[0]==0&&out[1]==0,ctr) 10 out[0]=717;out[1]=818 11 gv_check("subnormal exact declared interval",la_iv_f32(1,0,out)==0&&out[0]==0&&out[1]==1,ctr) 12 out[0]=717;out[1]=818 13 gv_check("negative-subnormal exact declared interval",la_iv_f32(2147483649,0,out)==0&&out[0]==-1&&out[1]==0,ctr) 14 out[0]=717;out[1]=818 15 gv_check("32768 exact declared interval",la_iv_f32(1191182336,0,out)==0&&out[0]==35184372088832&&out[1]==35184372088832,ctr) 16 out[0]=717;out[1]=818 17 gv_check("negative32768 exact declared interval",la_iv_f32(3338665984,0,out)==0&&out[0]==-35184372088832&&out[1]==-35184372088832,ctr) 18 out[0]=717;out[1]=818 19 gv_check("actual-scale exact declared interval",la_iv_f32(1197943849,0,out)==0&&out[0]==63544213110784&&out[1]==63544213110784,ctr) 20 out[0]=717;out[1]=818 21 gv_check("negative-actual-scale exact declared interval",la_iv_f32(3345427497,0,out)==0&&out[0]==-63544213110784&&out[1]==-63544213110784,ctr) 22 out[0]=717;out[1]=818 23 gv_check("below-domain exact declared interval",la_iv_f32(1199570943,0,out)==0&&out[0]==70368739983360&&out[1]==70368739983360,ctr) 24 out[0]=717;out[1]=818 25 gv_check("negative-below-domain exact declared interval",la_iv_f32(3347054591,0,out)==0&&out[0]==-70368739983360&&out[1]==-70368739983360,ctr) 26 out[0]=717;out[1]=818 27 gv_check("domain exact declared interval",la_iv_f32(1199570944,0,out)==LA_AFFINE_RANGE&&out[0]==717&&out[1]==818,ctr) 28 out[0]=717;out[1]=818 29 gv_check("negative-domain exact declared interval",la_iv_f32(3347054592,0,out)==LA_AFFINE_RANGE&&out[0]==717&&out[1]==818,ctr) 30 out[0]=717;out[1]=818 31 gv_check("above-domain exact declared interval",la_iv_f32(1199570945,0,out)==LA_AFFINE_RANGE&&out[0]==717&&out[1]==818,ctr) 32 out[0]=717;out[1]=818 33 gv_check("negative-above-domain exact declared interval",la_iv_f32(3347054593,0,out)==LA_AFFINE_RANGE&&out[0]==717&&out[1]==818,ctr) 34 out[0]=717;out[1]=818 35 gv_check("positive-infinity exact declared interval",la_iv_f32(2139095040,0,out)==LA_AFFINE_RANGE&&out[0]==717&&out[1]==818,ctr) 36 out[0]=717;out[1]=818 37 gv_check("negative-infinity exact declared interval",la_iv_f32(4286578688,0,out)==LA_AFFINE_RANGE&&out[0]==717&&out[1]==818,ctr) 38 out[0]=717;out[1]=818 39 gv_check("nan exact declared interval",la_iv_f32(2143289344,0,out)==LA_AFFINE_RANGE&&out[0]==717&&out[1]==818,ctr) 40 out[0]=717;out[1]=818 41 gv_check("maximum-finite exact declared interval",la_iv_f32(2139095039,0,out)==LA_AFFINE_RANGE&&out[0]==717&&out[1]==818,ctr) 42 out[0]=717;out[1]=818 43 gv_check("negative-maximum-finite exact declared interval",la_iv_f32(4286578687,0,out)==LA_AFFINE_RANGE&&out[0]==717&&out[1]==818,ctr) 44 out[0]=717;out[1]=818 45 gv_check("source-shift exact declared interval",la_iv_f32(1199570944,-10,out)==0&&out[0]==68719476736&&out[1]==68719476736,ctr) 46 out[0]=717;out[1]=818 47 gv_check("base-shift exact declared interval",la_iv_f32(1107296256,10,out)==0&&out[0]==35184372088832&&out[1]==35184372088832,ctr) 48 input[0]=3209134080 49 input[1]=3194355712 50 input[2]=3216244736 51 input[3]=1061683200 52 input[4]=1052770304 53 input[5]=1069481984 54 input[6]=0 55 input[7]=1065353216 56 input[8]=925768117 57 input[9]=1197943849 58 input[10]=0 59 input[11]=0 60 input[12]=0 61 let rc:i64=la_static_yaw_bounds_f32(input,13,out,6,scratch,48) 62 gv_check("actual static source full affine admits",rc==0,ctr) 63 gv_check("native bounds enclose retained independent all-vertex f32 oracle extrema",rc==0&&out[0]<=-123&&out[1]<=-222&&out[2]<=-59&&out[3]>=123&&out[4]>=235&&out[5]>=36,ctr) 64 var i:i64=0;while i<6{gv_num(out[i]);gv_puts(" ");i=i+1};gv_puts("\n") 65 var held:*i64=sys_mmap(48) as *i64;i=0;while i<6{held[i]=out[i];i=i+1} 66 input[9]=1199570944 67 let bad:i64=la_static_yaw_bounds_f32(input,13,out,6,scratch,48);var same:i64=1;i=0;while i<6{if out[i]!=held[i]{same=0};i=i+1} 68 gv_check("equivalent scale factor above prior input bound admits",bad==0,ctr);i=0;while i<6{held[i]=out[i];i=i+1} 69 input[9]=1197943849;input[10]=1199570944 70 let tr:i64=la_static_yaw_bounds_f32(input,13,out,6,scratch,48);same=1;i=0;while i<6{if out[i]!=held[i]{same=0};i=i+1} 71 gv_check("translation boundary refuses unchanged",tr==LA_AFFINE_RANGE&&same==1,ctr) 72 input[10]=2139095040 73 let nf:i64=la_static_yaw_bounds_f32(input,13,out,6,scratch,48);same=1;i=0;while i<6{if out[i]!=held[i]{same=0};i=i+1} 74 gv_check("nonfinite translation refuses unchanged",nf==LA_AFFINE_RANGE&&same==1,ctr) 75 76 input[0]=3212836864;input[1]=3212836864;input[2]=3212836864 77 input[3]=1065353216;input[4]=1065353216;input[5]=1065353216 78 input[6]=0;input[7]=1065353216;input[10]=0;input[11]=0;input[12]=0 79 var exponent:i64=0-120;var sweep_ok:i64=1 80 while exponent<=120{ 81 input[8]=(127-exponent)<<23;input[9]=(127+exponent)<<23 82 let s:i64=la_static_yaw_bounds_f32(input,13,out,6,scratch,48) 83 if s!=0{sweep_ok=0} 84 i=0;while i<3{if out[i]>-256||out[i]<-257||out[i+3]<256||out[i+3]>257{sweep_ok=0};i=i+1} 85 exponent=exponent+1 86 } 87 gv_check("241 reciprocal binary32 power factorizations enclose same unit cube",sweep_ok==1,ctr) 88 input[8]=2130706432;input[9]=1 89 let sub:i64=la_static_yaw_bounds_f32(input,13,out,6,scratch,48) 90 gv_check("positive subnormal scale with finite reciprocal base admitted",sub==0&&out[0]<=-1&&out[3]>=1,ctr) 91 input[8]=1065353216;input[9]=2139095040 92 i=0;while i<6{held[i]=out[i];i=i+1} 93 let inf:i64=la_static_yaw_bounds_f32(input,13,out,6,scratch,48);same=1;i=0;while i<6{if held[i]!=out[i]{same=0};i=i+1} 94 gv_check("nonfinite instance scale refuses without output mutation",inf==LA_AFFINE_RANGE&&same==1,ctr) 95 input[8]=2130706432;input[9]=2130706432 96 let overflow:i64=la_static_yaw_bounds_f32(input,13,out,6,scratch,48);same=1;i=0;while i<6{if held[i]!=out[i]{same=0};i=i+1} 97 gv_check("true product overflow still refused unchanged",overflow==LA_AFFINE_RANGE&&same==1,ctr) 98 return gv_verdict("NX-AFFINE-DECLARED-DOMAIN",ctr,"Unchanged arithmetic bounds; factorization invariance and source enclosure") 99}