@@ -2679,6 +2679,47 @@ public static function providerNthRoot(): Generator
26792679 ['91 ' , 3 , 0 , RoundingMode::Up, '5 ' ],
26802680 ['91 ' , 3 , 0 , RoundingMode::HalfUp, '4 ' ],
26812681
2682+ ['0.999 ' , 3 , 0 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2683+ ['0.999 ' , 3 , 0 , RoundingMode::Down, '0 ' ],
2684+ ['0.999 ' , 3 , 0 , RoundingMode::Up, '1 ' ],
2685+ ['0.999 ' , 3 , 0 , RoundingMode::HalfUp, '1 ' ],
2686+ ['0.999 ' , 3 , 1 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2687+ ['0.999 ' , 3 , 1 , RoundingMode::Down, '0.9 ' ],
2688+ ['0.999 ' , 3 , 1 , RoundingMode::Up, '1.0 ' ],
2689+ ['0.999 ' , 3 , 1 , RoundingMode::HalfUp, '1.0 ' ],
2690+ ['0.999 ' , 3 , 2 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2691+ ['0.999 ' , 3 , 2 , RoundingMode::Down, '0.99 ' ],
2692+ ['0.999 ' , 3 , 2 , RoundingMode::Up, '1.00 ' ],
2693+ ['0.999 ' , 3 , 2 , RoundingMode::HalfUp, '1.00 ' ],
2694+ ['0.999 ' , 3 , 3 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2695+ ['0.999 ' , 3 , 3 , RoundingMode::Down, '0.999 ' ],
2696+ ['0.999 ' , 3 , 3 , RoundingMode::Up, '1.000 ' ],
2697+ ['0.999 ' , 3 , 3 , RoundingMode::HalfUp, '1.000 ' ],
2698+ ['0.999 ' , 3 , 4 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2699+ ['0.999 ' , 3 , 4 , RoundingMode::Down, '0.9996 ' ],
2700+ ['0.999 ' , 3 , 4 , RoundingMode::Up, '0.9997 ' ],
2701+ ['0.999 ' , 3 , 4 , RoundingMode::HalfUp, '0.9997 ' ],
2702+ ['-0.999 ' , 3 , 0 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2703+ ['-0.999 ' , 3 , 0 , RoundingMode::Down, '0 ' ],
2704+ ['-0.999 ' , 3 , 0 , RoundingMode::Up, '-1 ' ],
2705+ ['-0.999 ' , 3 , 0 , RoundingMode::HalfUp, '-1 ' ],
2706+ ['-0.999 ' , 3 , 1 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2707+ ['-0.999 ' , 3 , 1 , RoundingMode::Down, '-0.9 ' ],
2708+ ['-0.999 ' , 3 , 1 , RoundingMode::Up, '-1.0 ' ],
2709+ ['-0.999 ' , 3 , 1 , RoundingMode::HalfUp, '-1.0 ' ],
2710+ ['-0.999 ' , 3 , 2 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2711+ ['-0.999 ' , 3 , 2 , RoundingMode::Down, '-0.99 ' ],
2712+ ['-0.999 ' , 3 , 2 , RoundingMode::Up, '-1.00 ' ],
2713+ ['-0.999 ' , 3 , 2 , RoundingMode::HalfUp, '-1.00 ' ],
2714+ ['-0.999 ' , 3 , 3 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2715+ ['-0.999 ' , 3 , 3 , RoundingMode::Down, '-0.999 ' ],
2716+ ['-0.999 ' , 3 , 3 , RoundingMode::Up, '-1.000 ' ],
2717+ ['-0.999 ' , 3 , 3 , RoundingMode::HalfUp, '-1.000 ' ],
2718+ ['-0.999 ' , 3 , 4 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2719+ ['-0.999 ' , 3 , 4 , RoundingMode::Down, '-0.9996 ' ],
2720+ ['-0.999 ' , 3 , 4 , RoundingMode::Up, '-0.9997 ' ],
2721+ ['-0.999 ' , 3 , 4 , RoundingMode::HalfUp, '-0.9997 ' ],
2722+
26822723 // n = 4
26832724
26842725 // Perfect 4th powers: 16 = 2^4, 0.0016 = 0.2^4.
@@ -2739,6 +2780,38 @@ public static function providerNthRoot(): Generator
27392780 ['2 ' , 100 , 5 , RoundingMode::Up, '1.00696 ' ],
27402781 ['2 ' , 100 , 5 , RoundingMode::Down, '1.00695 ' ],
27412782 ['2 ' , 100 , 5 , RoundingMode::HalfUp, '1.00696 ' ],
2783+
2784+ // 2^100
2785+ ['1267650600228229401496703205376 ' , 100 , 10 , RoundingMode::Unnecessary, '2.0000000000 ' ],
2786+
2787+ // 2^100 + 1
2788+ ['1267650600228229401496703205377 ' , 100 , 10 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2789+ ['1267650600228229401496703205377 ' , 100 , 10 , RoundingMode::Down, '2.0000000000 ' ],
2790+ ['1267650600228229401496703205377 ' , 100 , 10 , RoundingMode::Up, '2.0000000001 ' ],
2791+ ['1267650600228229401496703205377 ' , 100 , 10 , RoundingMode::HalfUp, '2.0000000000 ' ],
2792+
2793+ // 2^100 - 1
2794+ ['1267650600228229401496703205375 ' , 100 , 10 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2795+ ['1267650600228229401496703205375 ' , 100 , 10 , RoundingMode::Down, '1.9999999999 ' ],
2796+ ['1267650600228229401496703205375 ' , 100 , 10 , RoundingMode::Up, '2.0000000000 ' ],
2797+ ['1267650600228229401496703205375 ' , 100 , 10 , RoundingMode::HalfUp, '2.0000000000 ' ],
2798+
2799+ // n = 101
2800+
2801+ // -(2^101)
2802+ ['-2535301200456458802993406410752 ' , 101 , 10 , RoundingMode::Unnecessary, '-2.0000000000 ' ],
2803+
2804+ // -(2^101 + 1)
2805+ ['-2535301200456458802993406410753 ' , 101 , 10 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2806+ ['-2535301200456458802993406410753 ' , 101 , 10 , RoundingMode::Down, '-2.0000000000 ' ],
2807+ ['-2535301200456458802993406410753 ' , 101 , 10 , RoundingMode::Up, '-2.0000000001 ' ],
2808+ ['-2535301200456458802993406410753 ' , 101 , 10 , RoundingMode::HalfUp, '-2.0000000000 ' ],
2809+
2810+ // -(2^101 - 1)
2811+ ['-2535301200456458802993406410751 ' , 101 , 10 , RoundingMode::Unnecessary, 'NTH_ROOT_NOT_EXACT ' ],
2812+ ['-2535301200456458802993406410751 ' , 101 , 10 , RoundingMode::Down, '-1.9999999999 ' ],
2813+ ['-2535301200456458802993406410751 ' , 101 , 10 , RoundingMode::Up, '-2.0000000000 ' ],
2814+ ['-2535301200456458802993406410751 ' , 101 , 10 , RoundingMode::HalfUp, '-2.0000000000 ' ],
27422815 ];
27432816
27442817 foreach ($ tests as [$ number , $ n , $ scale , $ roundingMode , $ expected ]) {
0 commit comments