GMP не справляется с лидирующей «+»? - PullRequest
2 голосов
/ 19 января 2009

Рассмотрим следующий код

// BOGP.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "gmp-static\gmp.h"
#include <stdlib.h>         /* For _MAX_PATH definition */
#include <stdio.h>
#include <malloc.h>


#define F(x) mpf_t x; mpf_init( x );

int main(int argc, char* argv[])
{
    F(foo);
    char * buff;
    mp_exp_t exp;

    mpf_init_set_str( foo, "123", 10 );
    buff = mpf_get_str(NULL, &exp, 10, 0, foo);
    puts( buff );
    puts("\n");
    free(buff); 

    mpf_init_set_str( foo, "-123", 10 );
    buff = mpf_get_str(NULL, &exp, 10, 0, foo);
    puts( buff );
    puts("\n");
    free(buff); 

    mpf_init_set_str( foo, "+123", 10 );
    buff = mpf_get_str(NULL, &exp, 10, 0, foo);
    puts( buff );
    puts("\n");
    free( buff );

}

В первом случае, после вызова mpf_get_str, buff содержит «123». Во втором, бафф содержит «-123». Но в третьем, бафф содержит пустую строку ("").

Это использует GMP 4.2.4. Может быть, мне нужно снова посмотреть в руководстве, но я бы подумал, что ведущий «+» был бы обработан так же легко, как ведущий «-».

1 Ответ

3 голосов
/ 19 января 2009

Насколько мне известно, ваша проблема нигде не упоминается в руководстве GMP . Однако вы можете проверить код для mpf_set_str напрямую, чтобы убедиться, что он не обрабатывает '+'.

Я не знаю, в какой ситуации вы нуждаетесь в этом, но если вам действительно нужен символ для обозначения положительного / отрицательного, вы можете воспользоваться тем фактом, что эти функции игнорируют начальные пробелы, таким образом используя " 123" .

...