У меня есть таблица Oracle с столбцом типа NUMBER, который содержит ряд чисел с плавающей запятой. Что такое правильный способ чтения, что в переменную C помощью Pro * C Я пробовал следующее:Обработка плавающих чисел в Pro * C
EXEC SQL BEGIN DECLARE SECTION;
static float o_start_x;
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT start_x
FROM my_table
INTO :o_start_x;
чаще, что это не нормально, однако некоторые числа с плавающей точкой, в частности, очень близко к 0 (например, 1.4E-43) вызывает следующие ошибки:
ORA-01426: numeric overflow;
есть ли правильный/безопасный способ чтения такого значения, или метода, имеющий оракул преобразовать тип достаточно безопасно, позволяя потерю точности ?
'.10' _can_ быть точно представленным в IEEE-754 decimal32, decimal64 и decimal128. '.10' _cannot_ быть точно представлены в двоичных файлах IEEE-754, binary32, binary64 и binary128. Бинарные форматы более распространены. – chux
Вы правы, decimalnnn обычно не используется в аппаратных средствах. Можете ли вы назвать товарное оборудование, которое у него есть? Я не могу. Мейнфрейм делает. Смотрите: http://stackoverflow.com/questions/1447215/why-arent-floating-point-decimal-numbers-hardware-accelerated-like-floating-poi –
Мой комментарий не был направлен на аппаратное обеспечение, а просто на идею IEEE -754 и '0,1'. Существует несколько вариантов реализации десятичной библиотеки. В Google-decimal64 появилось несколько из них. Поскольку система Oracle, вероятно, может потребовать быструю десятичную реализацию (т. Е. HW), ваше утверждение, скорее всего, будет правильным в рамках этой статьи, о которой думают не в целом. «Можете ли вы назвать товарное оборудование ...» звучит как хороший вопрос для публикации, поскольку 4-летняя ссылка, которую вы дали, может пригодиться с информацией 2013 года. – chux