Windows / Visual Studio шатается в совершенно прекрасной программе C - PullRequest
0 голосов
/ 14 июля 2020

Хорошо, нет e go, может быть, что-то смешное в программе, но G CC и Clang компилируют ее нормально и запускают так, как задумано в Ubuntu 20.04 и MacOS 10.14. Visual Studio 2013 на Win 7? Это отдельная история.

    #include <stdio.h>
    #include <math.h>

    int main()
    {   double num1, num2, result; 
        printf("\nEnter numbers : ");
        scanf("%lf %lf", &num1, &num2);
        result = pow(num1,num2);
        printf("\n%s %lf\n","Result = ",result);
   }

Круто? На Mac / Linux Когда я пробую 128 ^ 128, я получаю точный ответ 528294531135665246352339784916516606518847326036121522127960709026673902556724859474417255887657187894674394993257128678882347559502685537250538978462939576908386683999005084168731517676426441053024232908211188404148028292751561738838396898767036476489538580897737998336.000000

При компиляции без ошибок или предупреждений в VS2013 и запуске на том же компьютере (Win7Pro) я получаю:

52829453113566525, за которым следует много нулей, так что ответ имеет такое же количество цифр, что и ответ выше.

Я могу проверить тот же код, я использую тот же. c файла на этих платформах, единственные переменные, которые я вижу, - это компилятор и ОС. Есть ли что-нибудь, что может сделать такой маленький разработчик, как я, чтобы исправить беспорядок Microsoft (как кажется) ??

Примечание: все операционные системы 64-битные.

Изменить: это минимальный воспроизводимый пример из более крупного проекта MathHack, который доступен @ sites.google.com / view / mathhack Полный исходный код доступен на этом веб-сайте, хотя я сомневаюсь, что есть проблема с остальной частью код.

Редактировать 2: Снимки экрана -

Работает на MacOSX 10.14 -

https://drive.google.com/file/d/1I0T75vJAUPnbK8y-oCkl_rHSqLTvCWzv/view?usp=sharing

Не работает на Win7 SP2 -

https://drive.google.com/file/d/148EuhwYlrWRom4fIPT_wfkxdSIYya3ep/view?usp=sharing

Edit 3:

Возможно, это ошибка в реализации printf () от Microsoft. Шак. Я буду обновляться до последней версии VS, чтобы посмотреть, исправит ли это это.

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Похоже, это ошибка в реализации printf () компилятора VS 2013.

Как было предложено @P__J__, я установил VS 2019 Community и решил проблему. Спасибо, P__J__.

Похоже, у таких проблем нет никакой надежды, кроме как просто проглотить их и перейти на последнюю версию VS.

0 голосов
/ 14 июля 2020

Это не ответ, но в комментариях не отображаются изображения:

Visual Studio 2019. Скомпилировано как C код (опция / T C)

Результат: enter image description here

IMO it is fine

SSE experiment:

int main()
{
    int sse = _set_SSE2_enable(1);
    double num1, num2, result;
    printf("\nEnter numbers : ");
    scanf("%lf %lf", &num1, &num2);
    result = pow(num1, num2);
    printf("\n SSE = %d, %s %lf\n", sse,  "Result = ", result);
    sse = _set_SSE2_enable(0);
    result = pow(num1, num2);
    printf("\n SSE = %d, %s %lf\n", sse, "Result = ", result);

}

enter image description here

x64 result: введите описание изображения здесь

...