瀏覽代碼

big: Fix signed multiplication for some inputs.

Jeroen van Rijn 4 年之前
父節點
當前提交
5fd7a5f32a
共有 4 個文件被更改,包括 6 次插入4 次删除
  1. 2 3
      core/math/big/build.bat
  2. 0 0
      core/math/big/example.odin
  3. 3 1
      core/math/big/internal.odin
  4. 1 0
      core/math/big/private.odin

+ 2 - 3
core/math/big/build.bat

@@ -1,9 +1,8 @@
 @echo off
 @echo off
-:odin run . -vet -o:speed -no-bounds-check
+odin run . -vet -o:size
 : -o:size
 : -o:size
 :odin build . -build-mode:shared -show-timings -o:minimal -no-bounds-check -define:MATH_BIG_EXE=false && python test.py -fast-tests
 :odin build . -build-mode:shared -show-timings -o:minimal -no-bounds-check -define:MATH_BIG_EXE=false && python test.py -fast-tests
 :odin build . -build-mode:shared -show-timings -o:size -no-bounds-check -define:MATH_BIG_EXE=false && python test.py -fast-tests
 :odin build . -build-mode:shared -show-timings -o:size -no-bounds-check -define:MATH_BIG_EXE=false && python test.py -fast-tests
 :odin build . -build-mode:shared -show-timings -o:size -define:MATH_BIG_EXE=false && python test.py -fast-tests
 :odin build . -build-mode:shared -show-timings -o:size -define:MATH_BIG_EXE=false && python test.py -fast-tests
-odin build . -build-mode:shared -show-timings -o:speed -no-bounds-check -define:MATH_BIG_EXE=false && python test.py
-: -fast-tests
+:odin build . -build-mode:shared -show-timings -o:speed -no-bounds-check -define:MATH_BIG_EXE=false && python test.py -fast-tests
 :odin build . -build-mode:shared -show-timings -o:speed -define:MATH_BIG_EXE=false && python test.py -fast-tests
 :odin build . -build-mode:shared -show-timings -o:speed -define:MATH_BIG_EXE=false && python test.py -fast-tests

File diff suppressed because it is too large
+ 0 - 0
core/math/big/example.odin


+ 3 - 1
core/math/big/internal.odin

@@ -630,6 +630,8 @@ internal_int_mul :: proc(dest, src, multiplier: ^Int, allocator := context.alloc
 	*/
 	*/
 	if multiplier.used == 0 || src.used == 0 { return internal_zero(dest); }
 	if multiplier.used == 0 || src.used == 0 { return internal_zero(dest); }
 
 
+	neg := src.sign != multiplier.sign;
+
 	if src == multiplier {
 	if src == multiplier {
 		/*
 		/*
 			Do we need to square?
 			Do we need to square?
@@ -694,7 +696,7 @@ internal_int_mul :: proc(dest, src, multiplier: ^Int, allocator := context.alloc
 			err = #force_inline _private_int_mul(dest, src, multiplier, digits);
 			err = #force_inline _private_int_mul(dest, src, multiplier, digits);
 		}
 		}
 	}
 	}
-	neg := src.sign != multiplier.sign;
+
 	dest.sign = .Negative if dest.used > 0 && neg else .Zero_or_Positive;
 	dest.sign = .Negative if dest.used > 0 && neg else .Zero_or_Positive;
 	return err;
 	return err;
 }
 }

+ 1 - 0
core/math/big/private.odin

@@ -161,6 +161,7 @@ _private_int_mul_toom :: proc(dest, a, b: ^Int, allocator := context.allocator)
 	internal_clamp(b1);
 	internal_clamp(b1);
 	internal_clamp(b2);
 	internal_clamp(b2);
 
 
+
 	/*
 	/*
 		\\ S1 = (a2+a1+a0) * (b2+b1+b0);
 		\\ S1 = (a2+a1+a0) * (b2+b1+b0);
 	*/
 	*/

Some files were not shown because too many files changed in this diff