�����JFIF��XX����������    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222�����"����4���������������������������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu������������������������������������#ډb���_�N��?�����������wQ���5-�~�I���8���������������������������������TK<5o�Iv-������������������k�_U_������������������������������~b�M��d��������Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�����?_�'ϔ��_�Ջt������������������������=||I �����6�έ"�����D���/[�k�9����Y�8������ds|\���Ҿp6�Ҵ���]��.����6���z<�v��@]�i%������������������������$j��~����g��J>��no����pM[me�i$[�����������s�o�ᘨ�˸ nɜG-�ĨU�ycP���3.DB�li�;���������������������hj���x����7Z^�N�h��������N3u{�:j�����x�힞��#M��&��jL P@��_���� P�������������������&��o8��������9������@Sz���6�t7#O�ߋ �����s}Yf�T������lmr����Z)'N��k�۞p�����w\�T���������������ȯ?�8`���O��i{wﭹW�[�r�� ��Q4F�׊������3m&L�=��h3�������z~��#����\�l :�F,j@�� ʱ�wQT����8�"kJO����6�֚l������������������}����R�>ډK���]��y����&����p�}b������;N�1�m�r$����|��7�>e�@���B�TM*-i�H��g�D�)� E�m�|�ؘbҗ�a���Ҿ����������������t4�����o���G��*oCN�rP���Q��@z,|?W[0���������:�n,j���WiE��W������$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S���������������VN;���}�s?.����� w��9��˟<���Mq4�Wv'������{)0�1mB����V����W[��������8�/<� �%���wT^�5���b��)iM� p�g�N�&ݝ������������VO~��q���u���9��� ����!��J27�����$����O-���! �:���%H��� ـ�������y�ΠM=t{!S�� �oK8�������t<����è��������:a��������[������ա�H���~��w��Qz`�p����o�^ ������Q��n����� �,uu�C��$ ^���,�������8�#��:�6��e�|~�����������!�3��3.�\0�����q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<�����Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y���|�y��� ~�6�@c��1vOp��������Ig�����4��l�OD�����L����� R���c���j�_�uX�6��3?nk��Wy�f;^*B� ��@���~a�`��Eu�������+�����6�L��.ü>��}y���}_�O�6�͐�:�Yr���G�X��kG������l^w����������~㒶sy���Iu�!���� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT����G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2������#I/�׍qz��^t�̔���������b�Yz4x����t�){ OH�����+(E��A&�N�������XT��o��"�XC����'���)}�J�z�p� ����~5�}�^����+�6����w��c��Q�|�Lp�d�H��}�(�.|����k��c4^�����"�����Z?ȕ ��a<�������L�!0�39C� �Eu�����C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf����M}7����]�������s2tcS{�\icTx;�\��7K���P������ʇ Z O-��~�������c>"��?��������P�����E��O�8��@�8��G��Q�g�a�Վ���󁶠��䧘��_%#r�>�����1�z�a���eb��qcP��ѵ��n���#L��� =��׀t� L�7�`�����V����A{�C:�g���e@�����w1 Xp�3�c3�ġ�������p��M"'-�@n4���fG���B3�DJ�8[Jo�ߐ���gK)ƛ��$���� �������8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`�������?��K�����QK�d���������B`�s}�>���`������*�>��,*@J�d�oF*�����弝��O}�k��s��]��y�ߘ�������c1G�V���<=�7��7����6��q�PT��tXԀ�!9*4�4Tހ���3XΛex�46�������Y��D ����� ����BdemDa����\�_l,����G�/���֌7���Y�](�xTt^%�GE�����4�}bT����ڹ�����;��Y)���B�Q��u��>J/J ���⮶.�XԄ��j�ݳ������+E��d ���r�5�_D�����1 ���o�� �B�x�΢�#����<��W�����8���R6�@���g�M�.��� dr�D��>(otU��@�x=��~v���2� ӣ�d�oBd�����3�eO�6�㣷����������ݜ�6��6Y��Qz`����S��{���\P��~z m5{J/L��1������<�e�ͅPu���b�]�ϔ��������'�������f�b� Zpw��c`"��i���BD@:)ִ�:�]��h���v�E��w���T�l�������P����"Ju�}��وV ��J��G6��. J/�Qgl߭�e�����@�z�Zev2u����)]կ���������7x�������s�M�-<ɯ�c��r��v�����@��$�ޮ}lk���a����'����>x��O\�Z������Fu>������ck#��&:��`�$��ai�>2Δ����l���oF[h�������lE�ܺ�Π���k:)���`������� $[6�����9�����kOw�\|�����8}������ބ:��񶐕��������I�A1/���=�2[�,�!��.}gN#�u����b���� ~���������݊��}34q�����d�E��L��������c��$���"�[q�U�硬g^��%B ��z���r�p�������J�ru%v\h�����1Y�ne`������ǥ:g����pQM~�^��Xi� ��`S�:V2������9.�P���V������?B�k�� ��������AEvw%�_�9C�Q����wKekP�ؠ�\������;Io d�{ ߞo�c1eP�����\� `����E=���@K<�Y��������eڼ�J����w����{av�F�'�M�@��������������/J��+9p����|]���������Iw &`���8���&�M�hg���[�{�������Xj���%��Ӓ�������������������$��(�����ʹN�������<>�I���RY�����K2�NPlL�ɀ�)��&e��������B+ь����(������������������� � �JTx����_?EZ� }@���� 6�U���뙢ط�z��dWI��n` D����噥�[��uV��"�G&�����Ú����2�g�}&m���������������������?ċ���"����Om#�������������������������� ��{���������������������ON��"S�X���Ne��ysQ���@�������������Fn��Vg�����dX�~nj����������������������]J�<�K]:����FW���b�������62����������=��5f����JKw����bf�X������������������������55��~J �%^�������:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v�������g�8�1��f2�������������������������4;�V���ǔ�)�������������������9���1\������������������������������c��v�/'Ƞ�w������������������$�4�R-��t����������������������������������� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃�������������������������������������������A��20�c#���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@���� 0!1@AP"#2Q`$3V�%45a6�FRUq����� ������^7ׅ,$n��������+��F�`��2X'��0vM��p�L=�������5��8������u�p~���.�`r�����\����O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;�������S�T���1���i[U�ɵz�]��U)V�S6���3$K{��ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u��!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ����D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v������멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$��JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4��[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ��dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il���d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J���oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.����3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R�=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N������#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%����JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$�I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$����L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)��H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>��dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\��y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~�������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7���ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz���)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)�'��8Ϣ�ٔ���ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'��L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(�}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3��������QT��a�����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3��,#c�co��q�a)*P�t����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O����������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l��O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m����PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q��������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~��|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@�l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`�7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ�����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i�����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0���Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q���nxҍ!U�f�!eh�i�2�m����`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{�/ �?�͟��|1�:�#g��W�>$����d��J��d�B���=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H�����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l�����l�cGs�ځ�������y�Ac������\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6�����N6�q��������N� ���! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td���� ?�����N����a��3��m���C���w��������xA�m�q�m����m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4����r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0�������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ�����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G������Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q��(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9���3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M�����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#y�w��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa�����Q�#� WeF��ŮNj�p�J* mQ�N�����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]���陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv�:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WP�w���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*�� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp��BGv[]�u�Ov����0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND���.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J ��4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R���� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(��>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG���{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/���*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>�e]�����Q�r�:����g�,i"�����ԩA��*M�<�G��b�if��l^M��5�� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f������֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ����˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)���h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������� G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W��I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��B�S�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c����]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪��\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W������6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}������6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@��P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6������m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw��k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ�����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e���R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1�[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN���ĕ���0������� !01@Q"2AaPq3BR�������?�����@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j��ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^����ԯ̾9Z��F��������n��1��� ��]�[��)�'�������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ���&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0���;_���3������� !01"@AQa2Pq#3BR�������?����ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q�� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6�����������4B>��o��](��$B���m�����a�!=���?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{�E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)�����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a��84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b���$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7���k�� 403WebShell
403Webshell
Server IP : 185.170.199.237  /  Your IP : 216.73.216.167
Web Server : LiteSpeed
System : Linux lt-bnk-web922.main-hosting.eu 4.18.0-553.70.1.lve.el8.x86_64 #1 SMP Wed Aug 20 14:42:18 UTC 2025 x86_64
User : u970350538 ( 970350538)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : OFF  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/golang/1.19.4/src/math/cmplx/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/golang/1.19.4/src/math/cmplx/cmath_test.go
// Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cmplx

import (
	"math"
	"testing"
)

// The higher-precision values in vc26 were used to derive the
// input arguments vc (see also comment below). For reference
// only (do not delete).
var vc26 = []complex128{
	(4.97901192488367350108546816 + 7.73887247457810456552351752i),
	(7.73887247457810456552351752 - 0.27688005719200159404635997i),
	(-0.27688005719200159404635997 - 5.01060361827107492160848778i),
	(-5.01060361827107492160848778 + 9.63629370719841737980004837i),
	(9.63629370719841737980004837 + 2.92637723924396464525443662i),
	(2.92637723924396464525443662 + 5.22908343145930665230025625i),
	(5.22908343145930665230025625 + 2.72793991043601025126008608i),
	(2.72793991043601025126008608 + 1.82530809168085506044576505i),
	(1.82530809168085506044576505 - 8.68592476857560136238589621i),
	(-8.68592476857560136238589621 + 4.97901192488367350108546816i),
}

var vc = []complex128{
	(4.9790119248836735e+00 + 7.7388724745781045e+00i),
	(7.7388724745781045e+00 - 2.7688005719200159e-01i),
	(-2.7688005719200159e-01 - 5.0106036182710749e+00i),
	(-5.0106036182710749e+00 + 9.6362937071984173e+00i),
	(9.6362937071984173e+00 + 2.9263772392439646e+00i),
	(2.9263772392439646e+00 + 5.2290834314593066e+00i),
	(5.2290834314593066e+00 + 2.7279399104360102e+00i),
	(2.7279399104360102e+00 + 1.8253080916808550e+00i),
	(1.8253080916808550e+00 - 8.6859247685756013e+00i),
	(-8.6859247685756013e+00 + 4.9790119248836735e+00i),
}

// The expected results below were computed by the high precision calculators
// at https://keisan.casio.com/.  More exact input values (array vc[], above)
// were obtained by printing them with "%.26f".  The answers were calculated
// to 26 digits (by using the "Digit number" drop-down control of each
// calculator).

var abs = []float64{
	9.2022120669932650313380972e+00,
	7.7438239742296106616261394e+00,
	5.0182478202557746902556648e+00,
	1.0861137372799545160704002e+01,
	1.0070841084922199607011905e+01,
	5.9922447613166942183705192e+00,
	5.8978784056736762299945176e+00,
	3.2822866700678709020367184e+00,
	8.8756430028990417290744307e+00,
	1.0011785496777731986390856e+01,
}

var acos = []complex128{
	(1.0017679804707456328694569 - 2.9138232718554953784519807i),
	(0.03606427612041407369636057 + 2.7358584434576260925091256i),
	(1.6249365462333796703711823 + 2.3159537454335901187730929i),
	(2.0485650849650740120660391 - 3.0795576791204117911123886i),
	(0.29621132089073067282488147 - 3.0007392508200622519398814i),
	(1.0664555914934156601503632 - 2.4872865024796011364747111i),
	(0.48681307452231387690013905 - 2.463655912283054555225301i),
	(0.6116977071277574248407752 - 1.8734458851737055262693056i),
	(1.3649311280370181331184214 + 2.8793528632328795424123832i),
	(2.6189310485682988308904501 - 2.9956543302898767795858704i),
}
var acosh = []complex128{
	(2.9138232718554953784519807 + 1.0017679804707456328694569i),
	(2.7358584434576260925091256 - 0.03606427612041407369636057i),
	(2.3159537454335901187730929 - 1.6249365462333796703711823i),
	(3.0795576791204117911123886 + 2.0485650849650740120660391i),
	(3.0007392508200622519398814 + 0.29621132089073067282488147i),
	(2.4872865024796011364747111 + 1.0664555914934156601503632i),
	(2.463655912283054555225301 + 0.48681307452231387690013905i),
	(1.8734458851737055262693056 + 0.6116977071277574248407752i),
	(2.8793528632328795424123832 - 1.3649311280370181331184214i),
	(2.9956543302898767795858704 + 2.6189310485682988308904501i),
}
var asin = []complex128{
	(0.56902834632415098636186476 + 2.9138232718554953784519807i),
	(1.5347320506744825455349611 - 2.7358584434576260925091256i),
	(-0.054140219438483051139860579 - 2.3159537454335901187730929i),
	(-0.47776875817017739283471738 + 3.0795576791204117911123886i),
	(1.2745850059041659464064402 + 3.0007392508200622519398814i),
	(0.50434073530148095908095852 + 2.4872865024796011364747111i),
	(1.0839832522725827423311826 + 2.463655912283054555225301i),
	(0.9590986196671391943905465 + 1.8734458851737055262693056i),
	(0.20586519875787848611290031 - 2.8793528632328795424123832i),
	(-1.0481347217734022116591284 + 2.9956543302898767795858704i),
}
var asinh = []complex128{
	(2.9113760469415295679342185 + 0.99639459545704326759805893i),
	(2.7441755423994259061579029 - 0.035468308789000500601119392i),
	(-2.2962136462520690506126678 - 1.5144663565690151885726707i),
	(-3.0771233459295725965402455 + 1.0895577967194013849422294i),
	(3.0048366100923647417557027 + 0.29346979169819220036454168i),
	(2.4800059370795363157364643 + 1.0545868606049165710424232i),
	(2.4718773838309585611141821 + 0.47502344364250803363708842i),
	(1.8910743588080159144378396 + 0.56882925572563602341139174i),
	(2.8735426423367341878069406 - 1.362376149648891420997548i),
	(-2.9981750586172477217567878 + 0.5183571985225367505624207i),
}
var atan = []complex128{
	(1.5115747079332741358607654 + 0.091324403603954494382276776i),
	(1.4424504323482602560806727 - 0.0045416132642803911503770933i),
	(-1.5593488703630532674484026 - 0.20163295409248362456446431i),
	(-1.5280619472445889867794105 + 0.081721556230672003746956324i),
	(1.4759909163240799678221039 + 0.028602969320691644358773586i),
	(1.4877353772046548932715555 + 0.14566877153207281663773599i),
	(1.4206983927779191889826 + 0.076830486127880702249439993i),
	(1.3162236060498933364869556 + 0.16031313000467530644933363i),
	(1.5473450684303703578810093 - 0.11064907507939082484935782i),
	(-1.4841462340185253987375812 + 0.049341850305024399493142411i),
}
var atanh = []complex128{
	(0.058375027938968509064640438 + 1.4793488495105334458167782i),
	(0.12977343497790381229915667 - 1.5661009410463561327262499i),
	(-0.010576456067347252072200088 - 1.3743698658402284549750563i),
	(-0.042218595678688358882784918 + 1.4891433968166405606692604i),
	(0.095218997991316722061828397 + 1.5416884098777110330499698i),
	(0.079965459366890323857556487 + 1.4252510353873192700350435i),
	(0.15051245471980726221708301 + 1.4907432533016303804884461i),
	(0.25082072933993987714470373 + 1.392057665392187516442986i),
	(0.022896108815797135846276662 - 1.4609224989282864208963021i),
	(-0.08665624101841876130537396 + 1.5207902036935093480142159i),
}
var conj = []complex128{
	(4.9790119248836735e+00 - 7.7388724745781045e+00i),
	(7.7388724745781045e+00 + 2.7688005719200159e-01i),
	(-2.7688005719200159e-01 + 5.0106036182710749e+00i),
	(-5.0106036182710749e+00 - 9.6362937071984173e+00i),
	(9.6362937071984173e+00 - 2.9263772392439646e+00i),
	(2.9263772392439646e+00 - 5.2290834314593066e+00i),
	(5.2290834314593066e+00 - 2.7279399104360102e+00i),
	(2.7279399104360102e+00 - 1.8253080916808550e+00i),
	(1.8253080916808550e+00 + 8.6859247685756013e+00i),
	(-8.6859247685756013e+00 - 4.9790119248836735e+00i),
}
var cos = []complex128{
	(3.024540920601483938336569e+02 + 1.1073797572517071650045357e+03i),
	(1.192858682649064973252758e-01 + 2.7857554122333065540970207e-01i),
	(7.2144394304528306603857962e+01 - 2.0500129667076044169954205e+01i),
	(2.24921952538403984190541e+03 - 7.317363745602773587049329e+03i),
	(-9.148222970032421760015498e+00 + 1.953124661113563541862227e+00i),
	(-9.116081175857732248227078e+01 - 1.992669213569952232487371e+01i),
	(3.795639179042704640002918e+00 + 6.623513350981458399309662e+00i),
	(-2.9144840732498869560679084e+00 - 1.214620271628002917638748e+00i),
	(-7.45123482501299743872481e+02 + 2.8641692314488080814066734e+03i),
	(-5.371977967039319076416747e+01 + 4.893348341339375830564624e+01i),
}
var cosh = []complex128{
	(8.34638383523018249366948e+00 + 7.2181057886425846415112064e+01i),
	(1.10421967379919366952251e+03 - 3.1379638689277575379469861e+02i),
	(3.051485206773701584738512e-01 - 2.6805384730105297848044485e-01i),
	(-7.33294728684187933370938e+01 + 1.574445942284918251038144e+01i),
	(-7.478643293945957535757355e+03 + 1.6348382209913353929473321e+03i),
	(4.622316522966235701630926e+00 - 8.088695185566375256093098e+00i),
	(-8.544333183278877406197712e+01 + 3.7505836120128166455231717e+01i),
	(-1.934457815021493925115198e+00 + 7.3725859611767228178358673e+00i),
	(-2.352958770061749348353548e+00 - 2.034982010440878358915409e+00i),
	(7.79756457532134748165069e+02 + 2.8549350716819176560377717e+03i),
}
var exp = []complex128{
	(1.669197736864670815125146e+01 + 1.4436895109507663689174096e+02i),
	(2.2084389286252583447276212e+03 - 6.2759289284909211238261917e+02i),
	(2.227538273122775173434327e-01 + 7.2468284028334191250470034e-01i),
	(-6.5182985958153548997881627e-03 - 1.39965837915193860879044e-03i),
	(-1.4957286524084015746110777e+04 + 3.269676455931135688988042e+03i),
	(9.218158701983105935659273e+00 - 1.6223985291084956009304582e+01i),
	(-1.7088175716853040841444505e+02 + 7.501382609870410713795546e+01i),
	(-3.852461315830959613132505e+00 + 1.4808420423156073221970892e+01i),
	(-4.586775503301407379786695e+00 - 4.178501081246873415144744e+00i),
	(4.451337963005453491095747e-05 - 1.62977574205442915935263e-04i),
}
var log = []complex128{
	(2.2194438972179194425697051e+00 + 9.9909115046919291062461269e-01i),
	(2.0468956191154167256337289e+00 - 3.5762575021856971295156489e-02i),
	(1.6130808329853860438751244e+00 - 1.6259990074019058442232221e+00i),
	(2.3851910394823008710032651e+00 + 2.0502936359659111755031062e+00i),
	(2.3096442270679923004800651e+00 + 2.9483213155446756211881774e-01i),
	(1.7904660933974656106951860e+00 + 1.0605860367252556281902109e+00i),
	(1.7745926939841751666177512e+00 + 4.8084556083358307819310911e-01i),
	(1.1885403350045342425648780e+00 + 5.8969634164776659423195222e-01i),
	(2.1833107837679082586772505e+00 - 1.3636647724582455028314573e+00i),
	(2.3037629487273259170991671e+00 + 2.6210913895386013290915234e+00i),
}
var log10 = []complex128{
	(9.6389223745559042474184943e-01 + 4.338997735671419492599631e-01i),
	(8.8895547241376579493490892e-01 - 1.5531488990643548254864806e-02i),
	(7.0055210462945412305244578e-01 - 7.0616239649481243222248404e-01i),
	(1.0358753067322445311676952e+00 + 8.9043121238134980156490909e-01i),
	(1.003065742975330237172029e+00 + 1.2804396782187887479857811e-01i),
	(7.7758954439739162532085157e-01 + 4.6060666333341810869055108e-01i),
	(7.7069581462315327037689152e-01 + 2.0882857371769952195512475e-01i),
	(5.1617650901191156135137239e-01 + 2.5610186717615977620363299e-01i),
	(9.4819982567026639742663212e-01 - 5.9223208584446952284914289e-01i),
	(1.0005115362454417135973429e+00 + 1.1383255270407412817250921e+00i),
}

type ff struct {
	r, theta float64
}

var polar = []ff{
	{9.2022120669932650313380972e+00, 9.9909115046919291062461269e-01},
	{7.7438239742296106616261394e+00, -3.5762575021856971295156489e-02},
	{5.0182478202557746902556648e+00, -1.6259990074019058442232221e+00},
	{1.0861137372799545160704002e+01, 2.0502936359659111755031062e+00},
	{1.0070841084922199607011905e+01, 2.9483213155446756211881774e-01},
	{5.9922447613166942183705192e+00, 1.0605860367252556281902109e+00},
	{5.8978784056736762299945176e+00, 4.8084556083358307819310911e-01},
	{3.2822866700678709020367184e+00, 5.8969634164776659423195222e-01},
	{8.8756430028990417290744307e+00, -1.3636647724582455028314573e+00},
	{1.0011785496777731986390856e+01, 2.6210913895386013290915234e+00},
}
var pow = []complex128{
	(-2.499956739197529585028819e+00 + 1.759751724335650228957144e+00i),
	(7.357094338218116311191939e+04 - 5.089973412479151648145882e+04i),
	(1.320777296067768517259592e+01 - 3.165621914333901498921986e+01i),
	(-3.123287828297300934072149e-07 - 1.9849567521490553032502223e-7i),
	(8.0622651468477229614813e+04 - 7.80028727944573092944363e+04i),
	(-1.0268824572103165858577141e+00 - 4.716844738244989776610672e-01i),
	(-4.35953819012244175753187e+01 + 2.2036445974645306917648585e+02i),
	(8.3556092283250594950239e-01 - 1.2261571947167240272593282e+01i),
	(1.582292972120769306069625e+03 + 1.273564263524278244782512e+04i),
	(6.592208301642122149025369e-08 + 2.584887236651661903526389e-08i),
}
var sin = []complex128{
	(-1.1073801774240233539648544e+03 + 3.024539773002502192425231e+02i),
	(1.0317037521400759359744682e+00 - 3.2208979799929570242818e-02i),
	(-2.0501952097271429804261058e+01 - 7.2137981348240798841800967e+01i),
	(7.3173638080346338642193078e+03 + 2.249219506193664342566248e+03i),
	(-1.964375633631808177565226e+00 - 9.0958264713870404464159683e+00i),
	(1.992783647158514838337674e+01 - 9.11555769410191350416942e+01i),
	(-6.680335650741921444300349e+00 + 3.763353833142432513086117e+00i),
	(1.2794028166657459148245993e+00 - 2.7669092099795781155109602e+00i),
	(2.8641693949535259594188879e+03 + 7.451234399649871202841615e+02i),
	(-4.893811726244659135553033e+01 - 5.371469305562194635957655e+01i),
}
var sinh = []complex128{
	(8.34559353341652565758198e+00 + 7.2187893208650790476628899e+01i),
	(1.1042192548260646752051112e+03 - 3.1379650595631635858792056e+02i),
	(-8.239469336509264113041849e-02 + 9.9273668758439489098514519e-01i),
	(7.332295456982297798219401e+01 - 1.574585908122833444899023e+01i),
	(-7.4786432301380582103534216e+03 + 1.63483823493980029604071e+03i),
	(4.595842179016870234028347e+00 - 8.135290105518580753211484e+00i),
	(-8.543842533574163435246793e+01 + 3.750798997857594068272375e+01i),
	(-1.918003500809465688017307e+00 + 7.4358344619793504041350251e+00i),
	(-2.233816733239658031433147e+00 - 2.143519070805995056229335e+00i),
	(-7.797564130187551181105341e+02 - 2.8549352346594918614806877e+03i),
}
var sqrt = []complex128{
	(2.6628203086086130543813948e+00 + 1.4531345674282185229796902e+00i),
	(2.7823278427251986247149295e+00 - 4.9756907317005224529115567e-02i),
	(1.5397025302089642757361015e+00 - 1.6271336573016637535695727e+00i),
	(1.7103411581506875260277898e+00 + 2.8170677122737589676157029e+00i),
	(3.1390392472953103383607947e+00 + 4.6612625849858653248980849e-01i),
	(2.1117080764822417640789287e+00 + 1.2381170223514273234967850e+00i),
	(2.3587032281672256703926939e+00 + 5.7827111903257349935720172e-01i),
	(1.7335262588873410476661577e+00 + 5.2647258220721269141550382e-01i),
	(2.3131094974708716531499282e+00 - 1.8775429304303785570775490e+00i),
	(8.1420535745048086240947359e-01 + 3.0575897587277248522656113e+00i),
}
var tan = []complex128{
	(-1.928757919086441129134525e-07 + 1.0000003267499169073251826e+00i),
	(1.242412685364183792138948e+00 - 3.17149693883133370106696e+00i),
	(-4.6745126251587795225571826e-05 - 9.9992439225263959286114298e-01i),
	(4.792363401193648192887116e-09 + 1.0000000070589333451557723e+00i),
	(2.345740824080089140287315e-03 + 9.947733046570988661022763e-01i),
	(-2.396030789494815566088809e-05 + 9.9994781345418591429826779e-01i),
	(-7.370204836644931340905303e-03 + 1.0043553413417138987717748e+00i),
	(-3.691803847992048527007457e-02 + 9.6475071993469548066328894e-01i),
	(-2.781955256713729368401878e-08 - 1.000000049848910609006646e+00i),
	(9.4281590064030478879791249e-05 + 9.9999119340863718183758545e-01i),
}
var tanh = []complex128{
	(1.0000921981225144748819918e+00 + 2.160986245871518020231507e-05i),
	(9.9999967727531993209562591e-01 - 1.9953763222959658873657676e-07i),
	(-1.765485739548037260789686e+00 + 1.7024216325552852445168471e+00i),
	(-9.999189442732736452807108e-01 + 3.64906070494473701938098e-05i),
	(9.9999999224622333738729767e-01 - 3.560088949517914774813046e-09i),
	(1.0029324933367326862499343e+00 - 4.948790309797102353137528e-03i),
	(9.9996113064788012488693567e-01 - 4.226995742097032481451259e-05i),
	(1.0074784189316340029873945e+00 - 4.194050814891697808029407e-03i),
	(9.9385534229718327109131502e-01 + 5.144217985914355502713437e-02i),
	(-1.0000000491604982429364892e+00 - 2.901873195374433112227349e-08i),
}

// huge values along the real axis for testing reducePi in Tan
var hugeIn = []complex128{
	1 << 28,
	1 << 29,
	1 << 30,
	1 << 35,
	-1 << 120,
	1 << 240,
	1 << 300,
	-1 << 480,
	1234567891234567 << 180,
	-1234567891234567 << 300,
}

// Results for tanHuge[i] calculated with https://github.com/robpike/ivy
// using 4096 bits of working precision.
var tanHuge = []complex128{
	5.95641897939639421,
	-0.34551069233430392,
	-0.78469661331920043,
	0.84276385870875983,
	0.40806638884180424,
	-0.37603456702698076,
	4.60901287677810962,
	3.39135965054779932,
	-6.76813854009065030,
	-0.76417695016604922,
}

// special cases conform to C99 standard appendix G.6 Complex arithmetic
var inf, nan = math.Inf(1), math.NaN()

var vcAbsSC = []complex128{
	NaN(),
}
var absSC = []float64{
	math.NaN(),
}
var acosSC = []struct {
	in,
	want complex128
}{
	// G.6.1.1
	{complex(zero, zero),
		complex(math.Pi/2, -zero)},
	{complex(-zero, zero),
		complex(math.Pi/2, -zero)},
	{complex(zero, nan),
		complex(math.Pi/2, nan)},
	{complex(-zero, nan),
		complex(math.Pi/2, nan)},
	{complex(1.0, inf),
		complex(math.Pi/2, -inf)},
	{complex(1.0, nan),
		NaN()},
	{complex(-inf, 1.0),
		complex(math.Pi, -inf)},
	{complex(inf, 1.0),
		complex(0.0, -inf)},
	{complex(-inf, inf),
		complex(3*math.Pi/4, -inf)},
	{complex(inf, inf),
		complex(math.Pi/4, -inf)},
	{complex(inf, nan),
		complex(nan, -inf)}, // imaginary sign unspecified
	{complex(-inf, nan),
		complex(nan, inf)}, // imaginary sign unspecified
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		complex(nan, -inf)},
	{NaN(),
		NaN()},
}
var acoshSC = []struct {
	in,
	want complex128
}{
	// G.6.2.1
	{complex(zero, zero),
		complex(zero, math.Pi/2)},
	{complex(-zero, zero),
		complex(zero, math.Pi/2)},
	{complex(1.0, inf),
		complex(inf, math.Pi/2)},
	{complex(1.0, nan),
		NaN()},
	{complex(-inf, 1.0),
		complex(inf, math.Pi)},
	{complex(inf, 1.0),
		complex(inf, zero)},
	{complex(-inf, inf),
		complex(inf, 3*math.Pi/4)},
	{complex(inf, inf),
		complex(inf, math.Pi/4)},
	{complex(inf, nan),
		complex(inf, nan)},
	{complex(-inf, nan),
		complex(inf, nan)},
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		complex(inf, nan)},
	{NaN(),
		NaN()},
}
var asinSC = []struct {
	in,
	want complex128
}{
	// Derived from Asin(z) = -i * Asinh(i * z), G.6 #7
	{complex(zero, zero),
		complex(zero, zero)},
	{complex(1.0, inf),
		complex(0, inf)},
	{complex(1.0, nan),
		NaN()},
	{complex(inf, 1),
		complex(math.Pi/2, inf)},
	{complex(inf, inf),
		complex(math.Pi/4, inf)},
	{complex(inf, nan),
		complex(nan, inf)}, // imaginary sign unspecified
	{complex(nan, zero),
		NaN()},
	{complex(nan, 1),
		NaN()},
	{complex(nan, inf),
		complex(nan, inf)},
	{NaN(),
		NaN()},
}
var asinhSC = []struct {
	in,
	want complex128
}{
	// G.6.2.2
	{complex(zero, zero),
		complex(zero, zero)},
	{complex(1.0, inf),
		complex(inf, math.Pi/2)},
	{complex(1.0, nan),
		NaN()},
	{complex(inf, 1.0),
		complex(inf, zero)},
	{complex(inf, inf),
		complex(inf, math.Pi/4)},
	{complex(inf, nan),
		complex(inf, nan)},
	{complex(nan, zero),
		complex(nan, zero)},
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		complex(inf, nan)}, // sign of real part unspecified
	{NaN(),
		NaN()},
}
var atanSC = []struct {
	in,
	want complex128
}{
	// Derived from Atan(z) = -i * Atanh(i * z), G.6 #7
	{complex(0, zero),
		complex(0, zero)},
	{complex(0, nan),
		NaN()},
	{complex(1.0, zero),
		complex(math.Pi/4, zero)},
	{complex(1.0, inf),
		complex(math.Pi/2, zero)},
	{complex(1.0, nan),
		NaN()},
	{complex(inf, 1),
		complex(math.Pi/2, zero)},
	{complex(inf, inf),
		complex(math.Pi/2, zero)},
	{complex(inf, nan),
		complex(math.Pi/2, zero)},
	{complex(nan, 1),
		NaN()},
	{complex(nan, inf),
		complex(nan, zero)},
	{NaN(),
		NaN()},
}
var atanhSC = []struct {
	in,
	want complex128
}{
	// G.6.2.3
	{complex(zero, zero),
		complex(zero, zero)},
	{complex(zero, nan),
		complex(zero, nan)},
	{complex(1.0, zero),
		complex(inf, zero)},
	{complex(1.0, inf),
		complex(0, math.Pi/2)},
	{complex(1.0, nan),
		NaN()},
	{complex(inf, 1.0),
		complex(zero, math.Pi/2)},
	{complex(inf, inf),
		complex(zero, math.Pi/2)},
	{complex(inf, nan),
		complex(0, nan)},
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		complex(zero, math.Pi/2)}, // sign of real part not specified.
	{NaN(),
		NaN()},
}
var vcConjSC = []complex128{
	NaN(),
}
var conjSC = []complex128{
	NaN(),
}
var cosSC = []struct {
	in,
	want complex128
}{
	// Derived from Cos(z) = Cosh(i * z), G.6 #7
	{complex(zero, zero),
		complex(1.0, -zero)},
	{complex(zero, inf),
		complex(inf, -zero)},
	{complex(zero, nan),
		complex(nan, zero)}, // imaginary sign unspecified
	{complex(1.0, inf),
		complex(inf, -inf)},
	{complex(1.0, nan),
		NaN()},
	{complex(inf, zero),
		complex(nan, -zero)},
	{complex(inf, 1.0),
		NaN()},
	{complex(inf, inf),
		complex(inf, nan)}, // real sign unspecified
	{complex(inf, nan),
		NaN()},
	{complex(nan, zero),
		complex(nan, -zero)}, // imaginary sign unspecified
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		complex(inf, nan)},
	{NaN(),
		NaN()},
}
var coshSC = []struct {
	in,
	want complex128
}{
	// G.6.2.4
	{complex(zero, zero),
		complex(1.0, zero)},
	{complex(zero, inf),
		complex(nan, zero)}, // imaginary sign unspecified
	{complex(zero, nan),
		complex(nan, zero)}, // imaginary sign unspecified
	{complex(1.0, inf),
		NaN()},
	{complex(1.0, nan),
		NaN()},
	{complex(inf, zero),
		complex(inf, zero)},
	{complex(inf, 1.0),
		complex(inf*math.Cos(1.0), inf*math.Sin(1.0))}, // +inf  cis(y)
	{complex(inf, inf),
		complex(inf, nan)}, // real sign unspecified
	{complex(inf, nan),
		complex(inf, nan)},
	{complex(nan, zero),
		complex(nan, zero)}, // imaginary sign unspecified
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		NaN()},
	{NaN(),
		NaN()},
}
var expSC = []struct {
	in,
	want complex128
}{
	// G.6.3.1
	{complex(zero, zero),
		complex(1.0, zero)},
	{complex(-zero, zero),
		complex(1.0, zero)},
	{complex(1.0, inf),
		NaN()},
	{complex(1.0, nan),
		NaN()},
	{complex(inf, zero),
		complex(inf, zero)},
	{complex(-inf, 1.0),
		complex(math.Copysign(0.0, math.Cos(1.0)), math.Copysign(0.0, math.Sin(1.0)))}, // +0 cis(y)
	{complex(inf, 1.0),
		complex(inf*math.Cos(1.0), inf*math.Sin(1.0))}, // +inf  cis(y)
	{complex(-inf, inf),
		complex(zero, zero)}, // real and imaginary sign unspecified
	{complex(inf, inf),
		complex(inf, nan)}, // real sign unspecified
	{complex(-inf, nan),
		complex(zero, zero)}, // real and imaginary sign unspecified
	{complex(inf, nan),
		complex(inf, nan)}, // real sign unspecified
	{complex(nan, zero),
		complex(nan, zero)},
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		NaN()},
	{NaN(),
		NaN()},
}
var vcIsNaNSC = []complex128{
	complex(math.Inf(-1), math.Inf(-1)),
	complex(math.Inf(-1), math.NaN()),
	complex(math.NaN(), math.Inf(-1)),
	complex(0, math.NaN()),
	complex(math.NaN(), 0),
	complex(math.Inf(1), math.Inf(1)),
	complex(math.Inf(1), math.NaN()),
	complex(math.NaN(), math.Inf(1)),
	complex(math.NaN(), math.NaN()),
}
var isNaNSC = []bool{
	false,
	false,
	false,
	true,
	true,
	false,
	false,
	false,
	true,
}

var logSC = []struct {
	in,
	want complex128
}{
	// G.6.3.2
	{complex(zero, zero),
		complex(-inf, zero)},
	{complex(-zero, zero),
		complex(-inf, math.Pi)},
	{complex(1.0, inf),
		complex(inf, math.Pi/2)},
	{complex(1.0, nan),
		NaN()},
	{complex(-inf, 1.0),
		complex(inf, math.Pi)},
	{complex(inf, 1.0),
		complex(inf, 0.0)},
	{complex(-inf, inf),
		complex(inf, 3*math.Pi/4)},
	{complex(inf, inf),
		complex(inf, math.Pi/4)},
	{complex(-inf, nan),
		complex(inf, nan)},
	{complex(inf, nan),
		complex(inf, nan)},
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		complex(inf, nan)},
	{NaN(),
		NaN()},
}
var log10SC = []struct {
	in,
	want complex128
}{
	// derived from Log special cases via Log10(x) = math.Log10E*Log(x)
	{complex(zero, zero),
		complex(-inf, zero)},
	{complex(-zero, zero),
		complex(-inf, float64(math.Log10E)*float64(math.Pi))},
	{complex(1.0, inf),
		complex(inf, float64(math.Log10E)*float64(math.Pi/2))},
	{complex(1.0, nan),
		NaN()},
	{complex(-inf, 1.0),
		complex(inf, float64(math.Log10E)*float64(math.Pi))},
	{complex(inf, 1.0),
		complex(inf, 0.0)},
	{complex(-inf, inf),
		complex(inf, float64(math.Log10E)*float64(3*math.Pi/4))},
	{complex(inf, inf),
		complex(inf, float64(math.Log10E)*float64(math.Pi/4))},
	{complex(-inf, nan),
		complex(inf, nan)},
	{complex(inf, nan),
		complex(inf, nan)},
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		complex(inf, nan)},
	{NaN(),
		NaN()},
}
var vcPolarSC = []complex128{
	NaN(),
}
var polarSC = []ff{
	{math.NaN(), math.NaN()},
}
var vcPowSC = [][2]complex128{
	{NaN(), NaN()},
	{0, NaN()},
}
var powSC = []complex128{
	NaN(),
	NaN(),
}
var sinSC = []struct {
	in,
	want complex128
}{
	// Derived from Sin(z) = -i * Sinh(i * z), G.6 #7
	{complex(zero, zero),
		complex(zero, zero)},
	{complex(zero, inf),
		complex(zero, inf)},
	{complex(zero, nan),
		complex(zero, nan)},
	{complex(1.0, inf),
		complex(inf, inf)},
	{complex(1.0, nan),
		NaN()},
	{complex(inf, zero),
		complex(nan, zero)},
	{complex(inf, 1.0),
		NaN()},
	{complex(inf, inf),
		complex(nan, inf)},
	{complex(inf, nan),
		NaN()},
	{complex(nan, zero),
		complex(nan, zero)},
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		complex(nan, inf)},
	{NaN(),
		NaN()},
}

var sinhSC = []struct {
	in,
	want complex128
}{
	// G.6.2.5
	{complex(zero, zero),
		complex(zero, zero)},
	{complex(zero, inf),
		complex(zero, nan)}, // real sign unspecified
	{complex(zero, nan),
		complex(zero, nan)}, // real sign unspecified
	{complex(1.0, inf),
		NaN()},
	{complex(1.0, nan),
		NaN()},
	{complex(inf, zero),
		complex(inf, zero)},
	{complex(inf, 1.0),
		complex(inf*math.Cos(1.0), inf*math.Sin(1.0))}, // +inf  cis(y)
	{complex(inf, inf),
		complex(inf, nan)}, // real sign unspecified
	{complex(inf, nan),
		complex(inf, nan)}, // real sign unspecified
	{complex(nan, zero),
		complex(nan, zero)},
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		NaN()},
	{NaN(),
		NaN()},
}

var sqrtSC = []struct {
	in,
	want complex128
}{
	// G.6.4.2
	{complex(zero, zero),
		complex(zero, zero)},
	{complex(-zero, zero),
		complex(zero, zero)},
	{complex(1.0, inf),
		complex(inf, inf)},
	{complex(nan, inf),
		complex(inf, inf)},
	{complex(1.0, nan),
		NaN()},
	{complex(-inf, 1.0),
		complex(zero, inf)},
	{complex(inf, 1.0),
		complex(inf, zero)},
	{complex(-inf, nan),
		complex(nan, inf)}, // imaginary sign unspecified
	{complex(inf, nan),
		complex(inf, nan)},
	{complex(nan, 1.0),
		NaN()},
	{NaN(),
		NaN()},
}
var tanSC = []struct {
	in,
	want complex128
}{
	// Derived from Tan(z) = -i * Tanh(i * z), G.6 #7
	{complex(zero, zero),
		complex(zero, zero)},
	{complex(zero, nan),
		complex(zero, nan)},
	{complex(1.0, inf),
		complex(zero, 1.0)},
	{complex(1.0, nan),
		NaN()},
	{complex(inf, 1.0),
		NaN()},
	{complex(inf, inf),
		complex(zero, 1.0)},
	{complex(inf, nan),
		NaN()},
	{complex(nan, zero),
		NaN()},
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		complex(zero, 1.0)},
	{NaN(),
		NaN()},
}
var tanhSC = []struct {
	in,
	want complex128
}{
	// G.6.2.6
	{complex(zero, zero),
		complex(zero, zero)},
	{complex(1.0, inf),
		NaN()},
	{complex(1.0, nan),
		NaN()},
	{complex(inf, 1.0),
		complex(1.0, math.Copysign(0.0, math.Sin(2*1.0)))}, // 1 + i 0 sin(2y)
	{complex(inf, inf),
		complex(1.0, zero)}, // imaginary sign unspecified
	{complex(inf, nan),
		complex(1.0, zero)}, // imaginary sign unspecified
	{complex(nan, zero),
		complex(nan, zero)},
	{complex(nan, 1.0),
		NaN()},
	{complex(nan, inf),
		NaN()},
	{NaN(),
		NaN()},
}

// branch cut continuity checks
// points on each axis at |z| > 1 are checked for one-sided continuity from both the positive and negative side
// all possible branch cuts for the elementary functions are at one of these points

var zero = 0.0
var eps = 1.0 / (1 << 53)

var branchPoints = [][2]complex128{
	{complex(2.0, zero), complex(2.0, eps)},
	{complex(2.0, -zero), complex(2.0, -eps)},
	{complex(-2.0, zero), complex(-2.0, eps)},
	{complex(-2.0, -zero), complex(-2.0, -eps)},
	{complex(zero, 2.0), complex(eps, 2.0)},
	{complex(-zero, 2.0), complex(-eps, 2.0)},
	{complex(zero, -2.0), complex(eps, -2.0)},
	{complex(-zero, -2.0), complex(-eps, -2.0)},
}

// functions borrowed from pkg/math/all_test.go
func tolerance(a, b, e float64) bool {
	d := a - b
	if d < 0 {
		d = -d
	}

	// note: b is correct (expected) value, a is actual value.
	// make error tolerance a fraction of b, not a.
	if b != 0 {
		e = e * b
		if e < 0 {
			e = -e
		}
	}
	return d < e
}
func veryclose(a, b float64) bool { return tolerance(a, b, 4e-16) }
func alike(a, b float64) bool {
	switch {
	case a != a && b != b: // math.IsNaN(a) && math.IsNaN(b):
		return true
	case a == b:
		return math.Signbit(a) == math.Signbit(b)
	}
	return false
}

func cTolerance(a, b complex128, e float64) bool {
	d := Abs(a - b)
	if b != 0 {
		e = e * Abs(b)
		if e < 0 {
			e = -e
		}
	}
	return d < e
}
func cSoclose(a, b complex128, e float64) bool { return cTolerance(a, b, e) }
func cVeryclose(a, b complex128) bool          { return cTolerance(a, b, 4e-16) }
func cAlike(a, b complex128) bool {
	var realAlike, imagAlike bool
	if isExact(real(b)) {
		realAlike = alike(real(a), real(b))
	} else {
		// Allow non-exact special cases to have errors in ULP.
		realAlike = veryclose(real(a), real(b))
	}
	if isExact(imag(b)) {
		imagAlike = alike(imag(a), imag(b))
	} else {
		// Allow non-exact special cases to have errors in ULP.
		imagAlike = veryclose(imag(a), imag(b))
	}
	return realAlike && imagAlike
}
func isExact(x float64) bool {
	// Special cases that should match exactly.  Other cases are multiples
	// of Pi that may not be last bit identical on all platforms.
	return math.IsNaN(x) || math.IsInf(x, 0) || x == 0 || x == 1 || x == -1
}

func TestAbs(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Abs(vc[i]); !veryclose(abs[i], f) {
			t.Errorf("Abs(%g) = %g, want %g", vc[i], f, abs[i])
		}
	}
	for i := 0; i < len(vcAbsSC); i++ {
		if f := Abs(vcAbsSC[i]); !alike(absSC[i], f) {
			t.Errorf("Abs(%g) = %g, want %g", vcAbsSC[i], f, absSC[i])
		}
	}
}
func TestAcos(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Acos(vc[i]); !cSoclose(acos[i], f, 1e-14) {
			t.Errorf("Acos(%g) = %g, want %g", vc[i], f, acos[i])
		}
	}
	for _, v := range acosSC {
		if f := Acos(v.in); !cAlike(v.want, f) {
			t.Errorf("Acos(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Acos(Conj(z))  == Conj(Acos(z))
		if f := Acos(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Acos(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
	}
	for _, pt := range branchPoints {
		if f0, f1 := Acos(pt[0]), Acos(pt[1]); !cVeryclose(f0, f1) {
			t.Errorf("Acos(%g) not continuous, got %g want %g", pt[0], f0, f1)
		}
	}
}
func TestAcosh(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Acosh(vc[i]); !cSoclose(acosh[i], f, 1e-14) {
			t.Errorf("Acosh(%g) = %g, want %g", vc[i], f, acosh[i])
		}
	}
	for _, v := range acoshSC {
		if f := Acosh(v.in); !cAlike(v.want, f) {
			t.Errorf("Acosh(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Acosh(Conj(z))  == Conj(Acosh(z))
		if f := Acosh(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Acosh(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}

	}
	for _, pt := range branchPoints {
		if f0, f1 := Acosh(pt[0]), Acosh(pt[1]); !cVeryclose(f0, f1) {
			t.Errorf("Acosh(%g) not continuous, got %g want %g", pt[0], f0, f1)
		}
	}
}
func TestAsin(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Asin(vc[i]); !cSoclose(asin[i], f, 1e-14) {
			t.Errorf("Asin(%g) = %g, want %g", vc[i], f, asin[i])
		}
	}
	for _, v := range asinSC {
		if f := Asin(v.in); !cAlike(v.want, f) {
			t.Errorf("Asin(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Asin(Conj(z))  == Asin(Sinh(z))
		if f := Asin(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Asin(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
		if math.IsNaN(real(v.in)) || math.IsNaN(real(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Asin(-z)  == -Asin(z)
		if f := Asin(-v.in); !cAlike(-v.want, f) && !cAlike(v.in, -v.in) {
			t.Errorf("Asin(%g) = %g, want %g", -v.in, f, -v.want)
		}
	}
	for _, pt := range branchPoints {
		if f0, f1 := Asin(pt[0]), Asin(pt[1]); !cVeryclose(f0, f1) {
			t.Errorf("Asin(%g) not continuous, got %g want %g", pt[0], f0, f1)
		}
	}
}
func TestAsinh(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Asinh(vc[i]); !cSoclose(asinh[i], f, 4e-15) {
			t.Errorf("Asinh(%g) = %g, want %g", vc[i], f, asinh[i])
		}
	}
	for _, v := range asinhSC {
		if f := Asinh(v.in); !cAlike(v.want, f) {
			t.Errorf("Asinh(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Asinh(Conj(z))  == Asinh(Sinh(z))
		if f := Asinh(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Asinh(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
		if math.IsNaN(real(v.in)) || math.IsNaN(real(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Asinh(-z)  == -Asinh(z)
		if f := Asinh(-v.in); !cAlike(-v.want, f) && !cAlike(v.in, -v.in) {
			t.Errorf("Asinh(%g) = %g, want %g", -v.in, f, -v.want)
		}
	}
	for _, pt := range branchPoints {
		if f0, f1 := Asinh(pt[0]), Asinh(pt[1]); !cVeryclose(f0, f1) {
			t.Errorf("Asinh(%g) not continuous, got %g want %g", pt[0], f0, f1)
		}
	}
}
func TestAtan(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Atan(vc[i]); !cVeryclose(atan[i], f) {
			t.Errorf("Atan(%g) = %g, want %g", vc[i], f, atan[i])
		}
	}
	for _, v := range atanSC {
		if f := Atan(v.in); !cAlike(v.want, f) {
			t.Errorf("Atan(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Atan(Conj(z))  == Conj(Atan(z))
		if f := Atan(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Atan(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
		if math.IsNaN(real(v.in)) || math.IsNaN(real(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Atan(-z)  == -Atan(z)
		if f := Atan(-v.in); !cAlike(-v.want, f) && !cAlike(v.in, -v.in) {
			t.Errorf("Atan(%g) = %g, want %g", -v.in, f, -v.want)
		}
	}
	for _, pt := range branchPoints {
		if f0, f1 := Atan(pt[0]), Atan(pt[1]); !cVeryclose(f0, f1) {
			t.Errorf("Atan(%g) not continuous, got %g want %g", pt[0], f0, f1)
		}
	}
}
func TestAtanh(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Atanh(vc[i]); !cVeryclose(atanh[i], f) {
			t.Errorf("Atanh(%g) = %g, want %g", vc[i], f, atanh[i])
		}
	}
	for _, v := range atanhSC {
		if f := Atanh(v.in); !cAlike(v.want, f) {
			t.Errorf("Atanh(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Atanh(Conj(z))  == Conj(Atanh(z))
		if f := Atanh(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Atanh(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
		if math.IsNaN(real(v.in)) || math.IsNaN(real(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Atanh(-z)  == -Atanh(z)
		if f := Atanh(-v.in); !cAlike(-v.want, f) && !cAlike(v.in, -v.in) {
			t.Errorf("Atanh(%g) = %g, want %g", -v.in, f, -v.want)
		}
	}
	for _, pt := range branchPoints {
		if f0, f1 := Atanh(pt[0]), Atanh(pt[1]); !cVeryclose(f0, f1) {
			t.Errorf("Atanh(%g) not continuous, got %g want %g", pt[0], f0, f1)
		}
	}
}
func TestConj(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Conj(vc[i]); !cVeryclose(conj[i], f) {
			t.Errorf("Conj(%g) = %g, want %g", vc[i], f, conj[i])
		}
	}
	for i := 0; i < len(vcConjSC); i++ {
		if f := Conj(vcConjSC[i]); !cAlike(conjSC[i], f) {
			t.Errorf("Conj(%g) = %g, want %g", vcConjSC[i], f, conjSC[i])
		}
	}
}
func TestCos(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Cos(vc[i]); !cSoclose(cos[i], f, 3e-15) {
			t.Errorf("Cos(%g) = %g, want %g", vc[i], f, cos[i])
		}
	}
	for _, v := range cosSC {
		if f := Cos(v.in); !cAlike(v.want, f) {
			t.Errorf("Cos(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Cos(Conj(z))  == Cos(Cosh(z))
		if f := Cos(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Cos(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
		if math.IsNaN(real(v.in)) || math.IsNaN(real(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Cos(-z)  == Cos(z)
		if f := Cos(-v.in); !cAlike(v.want, f) && !cAlike(v.in, -v.in) {
			t.Errorf("Cos(%g) = %g, want %g", -v.in, f, v.want)
		}
	}
}
func TestCosh(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Cosh(vc[i]); !cSoclose(cosh[i], f, 2e-15) {
			t.Errorf("Cosh(%g) = %g, want %g", vc[i], f, cosh[i])
		}
	}
	for _, v := range coshSC {
		if f := Cosh(v.in); !cAlike(v.want, f) {
			t.Errorf("Cosh(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Cosh(Conj(z))  == Conj(Cosh(z))
		if f := Cosh(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Cosh(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
		if math.IsNaN(real(v.in)) || math.IsNaN(real(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Cosh(-z)  == Cosh(z)
		if f := Cosh(-v.in); !cAlike(v.want, f) && !cAlike(v.in, -v.in) {
			t.Errorf("Cosh(%g) = %g, want %g", -v.in, f, v.want)
		}
	}
}
func TestExp(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Exp(vc[i]); !cSoclose(exp[i], f, 1e-15) {
			t.Errorf("Exp(%g) = %g, want %g", vc[i], f, exp[i])
		}
	}
	for _, v := range expSC {
		if f := Exp(v.in); !cAlike(v.want, f) {
			t.Errorf("Exp(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Exp(Conj(z))  == Exp(Cosh(z))
		if f := Exp(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Exp(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
	}
}
func TestIsNaN(t *testing.T) {
	for i := 0; i < len(vcIsNaNSC); i++ {
		if f := IsNaN(vcIsNaNSC[i]); isNaNSC[i] != f {
			t.Errorf("IsNaN(%v) = %v, want %v", vcIsNaNSC[i], f, isNaNSC[i])
		}
	}
}
func TestLog(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Log(vc[i]); !cVeryclose(log[i], f) {
			t.Errorf("Log(%g) = %g, want %g", vc[i], f, log[i])
		}
	}
	for _, v := range logSC {
		if f := Log(v.in); !cAlike(v.want, f) {
			t.Errorf("Log(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Log(Conj(z))  == Conj(Log(z))
		if f := Log(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Log(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
	}
	for _, pt := range branchPoints {
		if f0, f1 := Log(pt[0]), Log(pt[1]); !cVeryclose(f0, f1) {
			t.Errorf("Log(%g) not continuous, got %g want %g", pt[0], f0, f1)
		}
	}
}
func TestLog10(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Log10(vc[i]); !cVeryclose(log10[i], f) {
			t.Errorf("Log10(%g) = %g, want %g", vc[i], f, log10[i])
		}
	}
	for _, v := range log10SC {
		if f := Log10(v.in); !cAlike(v.want, f) {
			t.Errorf("Log10(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Log10(Conj(z))  == Conj(Log10(z))
		if f := Log10(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Log10(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
	}
}
func TestPolar(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if r, theta := Polar(vc[i]); !veryclose(polar[i].r, r) && !veryclose(polar[i].theta, theta) {
			t.Errorf("Polar(%g) = %g, %g want %g, %g", vc[i], r, theta, polar[i].r, polar[i].theta)
		}
	}
	for i := 0; i < len(vcPolarSC); i++ {
		if r, theta := Polar(vcPolarSC[i]); !alike(polarSC[i].r, r) && !alike(polarSC[i].theta, theta) {
			t.Errorf("Polar(%g) = %g, %g, want %g, %g", vcPolarSC[i], r, theta, polarSC[i].r, polarSC[i].theta)
		}
	}
}
func TestPow(t *testing.T) {
	// Special cases for Pow(0, c).
	var zero = complex(0, 0)
	zeroPowers := [][2]complex128{
		{0, 1 + 0i},
		{1.5, 0 + 0i},
		{-1.5, complex(math.Inf(0), 0)},
		{-1.5 + 1.5i, Inf()},
	}
	for _, zp := range zeroPowers {
		if f := Pow(zero, zp[0]); f != zp[1] {
			t.Errorf("Pow(%g, %g) = %g, want %g", zero, zp[0], f, zp[1])
		}
	}
	var a = complex(3.0, 3.0)
	for i := 0; i < len(vc); i++ {
		if f := Pow(a, vc[i]); !cSoclose(pow[i], f, 4e-15) {
			t.Errorf("Pow(%g, %g) = %g, want %g", a, vc[i], f, pow[i])
		}
	}
	for i := 0; i < len(vcPowSC); i++ {
		if f := Pow(vcPowSC[i][0], vcPowSC[i][1]); !cAlike(powSC[i], f) {
			t.Errorf("Pow(%g, %g) = %g, want %g", vcPowSC[i][0], vcPowSC[i][1], f, powSC[i])
		}
	}
	for _, pt := range branchPoints {
		if f0, f1 := Pow(pt[0], 0.1), Pow(pt[1], 0.1); !cVeryclose(f0, f1) {
			t.Errorf("Pow(%g, 0.1) not continuous, got %g want %g", pt[0], f0, f1)
		}
	}
}
func TestRect(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Rect(polar[i].r, polar[i].theta); !cVeryclose(vc[i], f) {
			t.Errorf("Rect(%g, %g) = %g want %g", polar[i].r, polar[i].theta, f, vc[i])
		}
	}
	for i := 0; i < len(vcPolarSC); i++ {
		if f := Rect(polarSC[i].r, polarSC[i].theta); !cAlike(vcPolarSC[i], f) {
			t.Errorf("Rect(%g, %g) = %g, want %g", polarSC[i].r, polarSC[i].theta, f, vcPolarSC[i])
		}
	}
}
func TestSin(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Sin(vc[i]); !cSoclose(sin[i], f, 2e-15) {
			t.Errorf("Sin(%g) = %g, want %g", vc[i], f, sin[i])
		}
	}
	for _, v := range sinSC {
		if f := Sin(v.in); !cAlike(v.want, f) {
			t.Errorf("Sin(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Sin(Conj(z))  == Conj(Sin(z))
		if f := Sin(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Sinh(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
		if math.IsNaN(real(v.in)) || math.IsNaN(real(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Sin(-z)  == -Sin(z)
		if f := Sin(-v.in); !cAlike(-v.want, f) && !cAlike(v.in, -v.in) {
			t.Errorf("Sinh(%g) = %g, want %g", -v.in, f, -v.want)
		}
	}
}
func TestSinh(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Sinh(vc[i]); !cSoclose(sinh[i], f, 2e-15) {
			t.Errorf("Sinh(%g) = %g, want %g", vc[i], f, sinh[i])
		}
	}
	for _, v := range sinhSC {
		if f := Sinh(v.in); !cAlike(v.want, f) {
			t.Errorf("Sinh(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Sinh(Conj(z))  == Conj(Sinh(z))
		if f := Sinh(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Sinh(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
		if math.IsNaN(real(v.in)) || math.IsNaN(real(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Sinh(-z)  == -Sinh(z)
		if f := Sinh(-v.in); !cAlike(-v.want, f) && !cAlike(v.in, -v.in) {
			t.Errorf("Sinh(%g) = %g, want %g", -v.in, f, -v.want)
		}
	}
}
func TestSqrt(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Sqrt(vc[i]); !cVeryclose(sqrt[i], f) {
			t.Errorf("Sqrt(%g) = %g, want %g", vc[i], f, sqrt[i])
		}
	}
	for _, v := range sqrtSC {
		if f := Sqrt(v.in); !cAlike(v.want, f) {
			t.Errorf("Sqrt(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Sqrt(Conj(z)) == Conj(Sqrt(z))
		if f := Sqrt(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Sqrt(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
	}
	for _, pt := range branchPoints {
		if f0, f1 := Sqrt(pt[0]), Sqrt(pt[1]); !cVeryclose(f0, f1) {
			t.Errorf("Sqrt(%g) not continuous, got %g want %g", pt[0], f0, f1)
		}
	}
}
func TestTan(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Tan(vc[i]); !cSoclose(tan[i], f, 3e-15) {
			t.Errorf("Tan(%g) = %g, want %g", vc[i], f, tan[i])
		}
	}
	for _, v := range tanSC {
		if f := Tan(v.in); !cAlike(v.want, f) {
			t.Errorf("Tan(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Tan(Conj(z))  == Conj(Tan(z))
		if f := Tan(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Tan(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
		if math.IsNaN(real(v.in)) || math.IsNaN(real(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Tan(-z)  == -Tan(z)
		if f := Tan(-v.in); !cAlike(-v.want, f) && !cAlike(v.in, -v.in) {
			t.Errorf("Tan(%g) = %g, want %g", -v.in, f, -v.want)
		}
	}
}
func TestTanh(t *testing.T) {
	for i := 0; i < len(vc); i++ {
		if f := Tanh(vc[i]); !cSoclose(tanh[i], f, 2e-15) {
			t.Errorf("Tanh(%g) = %g, want %g", vc[i], f, tanh[i])
		}
	}
	for _, v := range tanhSC {
		if f := Tanh(v.in); !cAlike(v.want, f) {
			t.Errorf("Tanh(%g) = %g, want %g", v.in, f, v.want)
		}
		if math.IsNaN(imag(v.in)) || math.IsNaN(imag(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Tanh(Conj(z))  == Conj(Tanh(z))
		if f := Tanh(Conj(v.in)); !cAlike(Conj(v.want), f) && !cAlike(v.in, Conj(v.in)) {
			t.Errorf("Tanh(%g) = %g, want %g", Conj(v.in), f, Conj(v.want))
		}
		if math.IsNaN(real(v.in)) || math.IsNaN(real(v.want)) {
			// Negating NaN is undefined with regard to the sign bit produced.
			continue
		}
		// Tanh(-z)  == -Tanh(z)
		if f := Tanh(-v.in); !cAlike(-v.want, f) && !cAlike(v.in, -v.in) {
			t.Errorf("Tanh(%g) = %g, want %g", -v.in, f, -v.want)
		}
	}
}

// See issue 17577
func TestInfiniteLoopIntanSeries(t *testing.T) {
	want := Inf()
	if got := Cot(0); got != want {
		t.Errorf("Cot(0): got %g, want %g", got, want)
	}
}

func BenchmarkAbs(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Abs(complex(2.5, 3.5))
	}
}
func BenchmarkAcos(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Acos(complex(2.5, 3.5))
	}
}
func BenchmarkAcosh(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Acosh(complex(2.5, 3.5))
	}
}
func BenchmarkAsin(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Asin(complex(2.5, 3.5))
	}
}
func BenchmarkAsinh(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Asinh(complex(2.5, 3.5))
	}
}
func BenchmarkAtan(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Atan(complex(2.5, 3.5))
	}
}
func BenchmarkAtanh(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Atanh(complex(2.5, 3.5))
	}
}
func BenchmarkConj(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Conj(complex(2.5, 3.5))
	}
}
func BenchmarkCos(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Cos(complex(2.5, 3.5))
	}
}
func BenchmarkCosh(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Cosh(complex(2.5, 3.5))
	}
}
func BenchmarkExp(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Exp(complex(2.5, 3.5))
	}
}
func BenchmarkLog(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Log(complex(2.5, 3.5))
	}
}
func BenchmarkLog10(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Log10(complex(2.5, 3.5))
	}
}
func BenchmarkPhase(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Phase(complex(2.5, 3.5))
	}
}
func BenchmarkPolar(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Polar(complex(2.5, 3.5))
	}
}
func BenchmarkPow(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Pow(complex(2.5, 3.5), complex(2.5, 3.5))
	}
}
func BenchmarkRect(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Rect(2.5, 1.5)
	}
}
func BenchmarkSin(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Sin(complex(2.5, 3.5))
	}
}
func BenchmarkSinh(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Sinh(complex(2.5, 3.5))
	}
}
func BenchmarkSqrt(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Sqrt(complex(2.5, 3.5))
	}
}
func BenchmarkTan(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Tan(complex(2.5, 3.5))
	}
}
func BenchmarkTanh(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Tanh(complex(2.5, 3.5))
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit